添加--py-files

时间:2019-10-13 13:00:15

标签: pyspark user-defined-functions spark-submit python-packaging

我有一个运行良好的脚本。脚本具有一些UDF,最后将数据保存到Hive表中。然后,我尝试通过将UDF函数放在不同文件夹下的不同脚本中来对脚本进行模块化。这样做之后,开始获取错误模块不存在。然后尝试打包模块,并使用--py-files传递它。但是执行完此脚本后,该脚本将永远挂起。如果将代码放入模块而不是模块中,则一切正常 文件夹结构就像

application
    utils
        src
            utility.py
    component
        src
            main_Script.py

在main_script.py中,我有

import utils.src.utility as local_util

utility.py 具有udf func之类的

@func.udf("string")
def some_function:
    ...
    ..
    return 'xyz'

主要

许多操作,然后

from spark.sql import function as func
def main(df):
    df = df.withColumn('col1', local_utils.some_function(func.col('col2')))

然后将df保存到配置单元表中。 脚本执行类似\

spark-submit --queue xxx master yarn main.py

获取错误模块工具不存在

在检查文档时,建议打包utils并将其作为--py-files

传递

所以我压缩了utils,然后通过了

spark-submit --queue xxx master yarn --py-files utils.zip main.py

这项工作永远挂掉

如果我将utils代码放在main.py中然后运行,则一切正常。

所以想知道使用--py-files是怎么回事?

1 个答案:

答案 0 :(得分:0)

我认为您应该尝试将整个路径传递给utils文件,例如:

--py-files /home/user_name/project/utils.zip

utils.zip应该与带有__init__.py文件等的python模块具有相同的结构。