pyspark - AWS EMR 从 S3 导入 pyfile

标签 pyspark amazon-emr

我很难理解如何使用 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 文件。我有一个压缩包文件,如下所示。

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

关于pyspark - AWS EMR 从 S3 导入 pyfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53685939/

相关文章:

amazon-web-services - 创建EMR集群时出错,EMR服务角色无效

apache-spark - 了解 Spark 版本

postgresql - 使用 AWS Glue 时如何在 Postgres 中将字符串保存为 JSONB 类型

apache-spark - 为什么Spark的重新分区没有将数据平衡到分区中?

hadoop - 使用 amazon s3 作为输入、输出并将中间结果存储在 EMR map reduce 作业中

pyspark - EMR PySpark "ModuleNotFoundError: No module named ' spacy'"

hadoop-yarn - 无法在亚马逊 emr 中使用 apache flink

python - 将数据框转换为 JSON(在 pyspark 中),然后选择所需的字段

python - 与Pyspark合并

apache-spark - 在 Spark 2.3.0 中读取 Zstandard 压缩文件