[英]Pyspark and using UDFs: How to Pass Python Arguments (sys.argv, argparse) to Python Worker?
我使用 Spark 3.0.1 和 Python 3.6.8 通過 spark-submit 作為獨立應用程序運行腳本:
spark-submit [spark-confs] pyspark-script.py --args1 val1 --args2 val2
並且腳本運行良好。 使用 argparse 我可以獲取 args1 和 args2,但是,當我在腳本中引入 UDF 時:
my_udf = udf(lambda x: my_func(x))
df = df.withColumn(cat, my_udf(cat))
我收到以下錯誤:
pyspark.sql.utils.PythonException:
An exception was thrown from the Python worker. Please see the stack trace below.
Traceback (most recent call last):
File "/opt/zoran/python-3.6/lib/python3.6/site-packages/pyspark-script.py", line 24, in main
with open(args.args1) as f:
TypeError: expected str, bytes or os.PathLike object, not NoneType
我注意到我的 arguments 停止被拾取。 我通過硬編碼 arg1 和 arg2 的值來確認這一點,並且它像以前一樣工作。
問題是,如何將 python arguments 傳遞給底層的 Python Worker?
此外,引入使 PySpark 行為如此的 UDF 會發生什么?
編輯:有一個 init_config() 調用發生在主腳本之外。 它沒有包含在if __name__ == '__main__'
中,因此它會被自動調用並且它被設計為被調用一次。 但是,(1)它被 Python Worker 以某種方式再次調用,它(2)出錯,因為它無法訪問參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.