当我定义局部变量(例如大量复杂对象)并在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')))
Run Code Online (Sandbox Code Playgroud)
它会自动播放吗?还是节点与主机进行通信以每次获取其数据?我使用这种方法会有哪些性能损失?有更好的吗?(考虑到huge_list每次应用UDF都从头开始构建会更糟)