通过 --py-files 可以在pyspark中可以顺利导入

Posted 服务器-老张

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过 --py-files 可以在pyspark中可以顺利导入相关的知识,希望对你有一定的参考价值。

文件import问题

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

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

from pyspark import SparkContext ## 加载通用脚本 import common # # ......... # if __name__ == "__main__": sc = SparkContext(appName="ACoolApp") # # run #

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

# success pyspark --py-files lib/common.py > import common

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

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

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

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

数据保存至mysql

问题: 将数据写入mysql

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

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

直接来个代码片段:

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)

最后

以上是关于通过 --py-files 可以在pyspark中可以顺利导入的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS EMR 上的 zip 文件中提交 pyspark 支持 sql 文件

spark作业参数中的--archive,--file,py-file有啥区别

在 Spark 中的 EMR 上使用 --py-files 从 .zip 文件(使用 zipfile 包在 python 中创建)导入模块时出现问题

Spark集群 Python Package管理

pyspark - 错误仅出现在 IPython 中,但不在 vanila python 中

udf(用户定义函数)如何在 pyspark 中工作?