【发布时间】:2019-04-14 12:19:00
【问题描述】:
当我定义一个局部变量(例如一个庞大的复杂对象列表)并在 pyspark 的 UDF 中使用它时,究竟会发生什么。让我以此为例:
huge_list = [<object_1>, <object_2>, ..., <object_n>]
@udf
def some_function(a, b):
l = []
for obj in huge_list:
l.append(a.operation(obj))
return l
df2 = df.withColumn('foo', some_function(col('a'), col('b')))
它是自动广播的吗?还是节点每次都与主节点通信以获取其数据?这种方法对我有什么性能惩罚?有更好的吗? (考虑到每次应用 UDF 时都从头开始构建 huge_list 会更糟糕)
【问题讨论】:
标签: python apache-spark pyspark user-defined-functions