pyspark 如何调用自己写的.py文件
1、先说结论
- 使用SparkContext类中的addPyFile(path)方法
2、稍作解释
- 上面方法在spark官方文档中的描述如下
- Add a .py or .zip dependency for all tasks to be executed on this SparkContext in the future
- 字面意思,就是将加入的.py文件在后续为这个SparkContext所有的任务执行时提供依赖。
- 我的理解,spark有一个依赖库,addPyFile之后为在依赖库里生成一个临时文件,供程序调用。这也是为什么不进行这一步,直接import xxxx后运行程序时,spark会报错“ImportError: No module name xxxx”。
3、所遇问题
- 在2.x及之后版本的pyspark中,直接上来就是
- spark = SparkSession.builder.config(conf=conf).getOrCreate()
- 并没有发现SparkContext的踪迹,也就无法调用addPyFile(path)方法
4、SparkSession和SparkContext
- 既然能够上来就用SparkSession,那SparkContext必然与其有着联系
- spark在2.x之前,对于不同的功能,需要使用不同的Context
- 创建和操作RDD时,使用SparkContext
- 使用Streaming时,使用StreamingContext
- 使用SQL时,使用sqlContext
- 使用Hive时,使用HiveContext
- spark在2.x之后,引入了SparkSession的概念,方便统一上述的各种Context。
- 即SparkSession也就是SparkContext,sqlContext,HiveContext的组合
5、解决方法
- 如上所知,SparkContext是SparkSession的一部分。
- 于是就可以SparkSession.sparkContext.addPyFile(path)来将我们所需的.py文件放入到spark基于RDD计算时的依赖库里。