PySpark 中的 UDF 重新加载

UDF reload in PySpark

我正在使用 PySpark(在连接到 Spark 集群的 Jupyter Notebook 中)和一些 UDF。 UDF 将列表作为附加参数,我这样构造 UDF:

my_udf = F.udf(partial(my_normal_fn, list_param=list), StringType())

关于执行功能,一切正常。但我注意到 UDF 从未更新过。 澄清一下:当我更新 list 时,例如通过更改列表中的元素,UDF 不会更新。仍然使用带有旧列表的旧版本。即使我再次执行整个笔记本。 我必须重新启动 Jupyter 内核才能使用新版本的列表。这真的很烦人...

有什么想法吗?

我找到了解决方案。

我的 my_normal_fn 确实有以下签名:

def my_normal_fn(x, list_param=[]):
    dosomestuffwith_x_and_list_param

改成

def my_normal_fn(x, list_param):
    dosomestuffwith_x_and_list_param

成功了。有关详细信息,请参阅 here

感谢 SparkML-Slack 频道的用户 Drjones78。