pyspark - AWS EMR 从 S3 导入 pyfile
问题描述
我正在努力理解如何使用 pyspark 将文件作为库导入。
假设我有以下
生日快乐.py
def run():
print('Happy Birthday!')
sparky.py
from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession
import HappyBirthday
sc = SparkContext(appName="kmeans")
HappyBirthday.run()
sc.stop()
并且它们都存储在 S3 的同一个文件夹中。
我如何确保,当我使用
spark-submit --deploy-mode cluster s3://<PATH TO FILE>/sparky.py
,HappyBirthday.py 也是导入的吗?
解决方案
如果您尝试运行 sparky.py 并使用 HappyBirthday.py 中的函数,您可以尝试这样的事情。
spark-submit \
--deploy-mode cluster --master yarn \
--py-files s3://<PATH TO FILE>/HappyBirthday.py \
s3://<PATH TO FILE>/sparky.py
请记住,s3 没有“文件夹”的概念,因此您只需要提供文件或文件组的确切路径即可。
如果您的项目中有一大堆依赖项,您可以将它们全部捆绑到一个带有必要的init .py 文件的 .zip 文件中,您可以导入库中的任何函数。
例如 - 我有 sqlparse 库作为依赖项,里面有一堆 python 文件。我有一个包 zip 文件,如下所示。
unzip -l packages.zip
Archive: packages.zip
0 05-05-2019 12:44 sqlparse/
2249 05-05-2019 12:44 sqlparse/__init__.py
5916 05-05-2019 12:44 sqlparse/cli.py
...
110 05-05-2019 12:44 sqlparse-0.3.0.dist-info/WHEEL
--------- -------
125034 38 files
这将上传到 S3,然后在作业中使用。
spark-submit --deploy-mode cluster --master yarn --py-files s3://my0-test-bucket/artifacts/packages.zip s3://my-test-script/script/script.py
我的文件可以包含如下导入。
import pyspark
import sqlparse # Importing the library
from pprint import pprint
推荐阅读
- javascript - Javascript - 如何向本地 json 文件发出获取请求?
- docker - node-exporter 应该从主机还是容器运行?
- c++ - 如何使用原子指针执行双缓冲?
- rest - Keycloak PUT REST 415
- merge - 读取和合并计算机集群上的大表
- angular - 从 JQuery-UI 回调到 Angular 6
- laravel - 在 Laravel 中搜索
- unit-testing - 带有任何参数的 Mockito when() 无法按预期工作
- javascript - 由于切换功能,div 被隐藏
- grails - 在 Grails 的 json 视图中访问控制器参数