在 PySpark 中重新加载 UDF

Posted

技术标签:

【中文标题】在 PySpark 中重新加载 UDF【英文标题】:UDF reload in PySpark 【发布时间】:2016-10-25 09:24:10 【问题描述】:

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

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

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

有什么想法吗?

【问题讨论】:

【参考方案1】:

我找到了解决办法。

我的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。

【讨论】:

以上是关于在 PySpark 中重新加载 UDF的主要内容,如果未能解决你的问题,请参考以下文章

pyspark:在日期和时间上重新采样 pyspark 数据帧

Pyspark 使用 ArrayWritable

在 PySpark 中重新索引和填充缺失的日期

PySpark 根据特定列重新分区

如何在新数据到来时重新训练 pyspark 中保存的线性回归 ML 模型

在 python 3 中使用 pyspark 从 MySql db 加载数据