在 Glue pyspark 中使用参数

Using arguments with Glue pyspark

简介

感谢 this AWS Glue tutorial,我有一个 docker 配置了 Glue ETL PySpark 环境。 我用了 "hellowrold.py":

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

glueContext = GlueContext(SparkContext.getOrCreate())

medicare = spark.read.format("com.databricks.spark.csv").option("header", "true").option("inferSchema", "true").load('s3://awsglue-datasets/examples/medicare/Medicare_Hospital_Provider.csv')
medicare.printSchema()

我不能运行它做spark-submit hellowrold.py因为我面临着众所周知的错误:

ModuleNotFoundError: No module named 'dynamicframe'

我发现了一个 hack:使用重定向运算符:pyspark < helloworld.py,它非常有效。

我的问题

然而。 现在我需要将一些参数传递给我的脚本

我曾经(在尝试使用 Glue ETL 之前)使用:spark-submit myScript.py arg1 arg2 arg3

当我天真地尝试做 pyspark < myScript.py arg1 arg2 arg3 时,我得到了以下错误:

Error: pyspark does not support any application options.

最小myScript.py 重现

import sys
from pyspark import SparkContext
from awsglue.context import GlueContext

# Hello world
glueContext = GlueContext(SparkContext.getOrCreate())
print(sys.argv[1] + " " + sys.argv[2] + " " + sys.argv[3])

是否有任何解决方案可以继续使用 pyspark 而不是使用一些参数的 spark-submit?

我完全错了,有没有可以使用 spark-submit 和 Glue 的解决方案?

如果可能,我建议您使用与 PyCharm 的集成。 在那里你没有模块错误,你可以注入参数 通过 PyCharm 运行 配置的参数选项。

您链接的文章还解释了如何与 PyCharm 集成。

编辑:

当我登录 Docker 容器时 运行:

/home/spark-2.4.3-bin-spark-2.4.3-bin-hadoop2.8/bin/spark-submit myScript.py test1, test2, test3

它打印出 test1 test2 test3。我从你的脚本中复制了确切的内容。你能试试吗?