【问题标题】:AWS EMR import pyfile from S3AWS EMR 从 S3 导入 pyfile
【发布时间】:2019-05-06 07:09:22
【问题描述】:

我很难理解如何使用 pyspark 将文件作为库导入。

假设我有以下内容

HappyBirthday.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 也导入了?

【问题讨论】:

    标签: pyspark amazon-emr


    【解决方案1】:

    如果您尝试运行 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
    

    【讨论】:

      【解决方案2】:

      您要在此处使用的是spark-submit--py-files 参数。来自 Spark 文档中的 submitting applications 页面:

      对于 Python,您可以使用 spark-submit 的 --py-files 参数添加 .py、.zip 或 .egg 文件以与您的应用程序一起分发。如果您依赖多个 Python 文件,我们建议将它们打包成 .zip 或 .egg。

      对于您的示例,这将是:

      spark-submit --deploy-mode cluster --py-files s3://<PATH TO FILE>/sparky.py
      

      【讨论】:

        猜你喜欢
        • 2016-12-13
        • 2020-03-26
        • 1970-01-01
        • 2020-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-12
        相关资源
        最近更新 更多