在 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
。我从你的脚本中复制了确切的内容。你能试试吗?
简介
感谢 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
。我从你的脚本中复制了确切的内容。你能试试吗?