问题描述
首先,我的环境如下。
- AWS EMR:6.1.0
- 火花:3.0.0
Case1(失败)无法从导入的函数访问广播变量
假设我有两个脚本(a.py 和 b.py)
- a.py
from b import do_something
⋮
spark = SparkSession.builder.appName('HelpNeeded').getOrCreate()
data = {"name": "test"}
broadcast_variable = spark.sparkContext.broadcast(data)
df = ⋯
schema = ⋯
df.groupBy(["col_1","col_2"]).applyInPandas(do_something,schema=schema)
- b.py
def do_something(df):
⋮
data = broadcast_variable.value
⋮
如果我运行这个
$ zip src.zip b.py
$ spark-submit --deploy-mode client --py-files src.zip a.py
我收到一个错误提示
broadcast_variable not defined
Case2(成功)可从同一文件中定义的函数访问的广播变量
- a.py
def do_something(df):
⋮
data = broadcast_variable.value
⋮
⋮
spark = SparkSession.builder.appName('HelpNeeded').getOrCreate()
data = {"name": "test"}
broadcast_variable = spark.sparkContext.broadcast(data)
df = ⋯
schema = ⋯
df.groupBy(["col_1",schema=schema)
然后如果我用
运行脚本$ spark-submit --deploy-mode clinet a.py
我没有收到任何错误,表示已正确访问了 broadcast_variable。
有人知道我可能错过了什么吗?
提前致谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)