Spark Python的一些问题

再再再一次接触数据分析, 之前的每一次都是无疾而终, 希望这次可以有点产出…

用python来写spark分析程序时最大的两个感受:

  • 蛮方便的
  • python相关的资源相对较少

这里总结一下自己遇到的一些问题和解决办法.

文件import问题

问题: 在脚本中import了其他文件, pyspark中可以运行, 但是在spark-submit中总是失败

假定我们的任务脚本为app.py, 大体代码像这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from pyspark import SparkContext

## 加载通用脚本
import common

#
# .........
#

if __name__ == "__main__":
    sc = SparkContext(appName="ACoolApp")

    #
    # run
    # 

公用函数的放到了common.py文件中. 通过--py-files可以在pyspark中可以顺利导入:

1
2
3
4
# success
pyspark --py-files lib/common.py

> import common

而使用spark-submit来提交app.py总是失败

1
2
# import error
spark-submit --py-files lib/common.py app.py

找了好久的解决办法, 最后参考了这里. 简单来说, 所有的import操作必须在context完成之后. pyspark之所以不报错就是因为context已经初始化好了. 所以我们简单改下app.py中import的位置就可以了:

1
2
3
4
5
if __name__ == "__main__":
    sc = SparkContext(appName="ACoolApp")

    import common

数据保存至mysql中

问题: 将数据写入mysql

这里不多说, 方法可以直接参考这里. 关键点有两个:

  • 引入mysql的jdbc jar包
  • 设置好对应的的driver, 否则会报park python java.sql.SQLException: No suitable driver的错误

直接来个代码片段:

1
2
3
4
5
6
7
    url = 'jdbc:mysql://%s/%s' % (db_host, db_name)
    properties = {
            'user': db_username,
            'password': db_password,
            'driver': 'com.mysql.jdbc.Driver',
            }
    records.write.jdbc(url=url, table=db_table, mode='append', properties=properties)

最后

推荐几篇文章:

Comments