无法从导入的函数PySpark访问广播变量

问题描述

首先,我的环境如下。

  • AWS EMR:6.1.0
  • 火花:3.0.0

Case1(失败)无法从导入的函数访问广播变量

假设我有两个脚本(a.py 和 b.py)

  1. 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)

  1. 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(成功)可从同一文件中定义的函数访问的广播变量

  1. 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 (将#修改为@)