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

2024-04-28 09:34:27 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我的环境如下

  • AWS电子病历:6.1.0
  • 火花:3.0.0

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

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

  1. a、 派克
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、 派克
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

案例2(成功)广播变量可从同一文件中定义的函数访问

  1. a、 派克
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","col_2"]).applyInPandas(do_something, schema=schema)

然后如果我用

$ spark-submit --deploy-mode clinet a.py

我没有得到任何错误,这意味着正确访问了broadcast_变量

有人知道我错过了什么吗

提前谢谢


Tags: 函数pydfdataschemabuildercolzip