Spark 管道中的 UDF

Posted

技术标签:

【中文标题】Spark 管道中的 UDF【英文标题】:UDFs in Spark pipelines 【发布时间】:2018-02-12 13:07:26 【问题描述】:

我在 python 中创建了一个 UDF 来计算表中两个日期列之间的日期数组并将其注册到 spark 会话。我在管道中使用此 UDF 来计算新列。

现在,当我将此管道保存到 HDFS 并期望它被读回以在不同的程序(使用不同的 spark 会话)中执行时,UDF 不可用,因为它没有在任何地方全局注册。由于该过程是通用的并且需要运行多个管道,因此我不想添加 UDF 定义并将其注册到那里的 spark 会话中。

我是否可以在所有 Spark 会话中全局注册 UDF?

我可以以某种简洁的可维护方式将其添加为依赖项吗?

【问题讨论】:

我看到你的问题,想问一下你是如何在管道中添加 udf 的? 我使用 SQLTransformer 创建基于 sql 的转换。如果我使用注册了 udf 的 spark 会话,那么我可以在 SQLTransformer 中使用 UDF 并将其放入管道中。 我在使用 udf 的“无法识别 %s 类型的管道阶段”时收到此错误。 % type(stage)) TypeError: 无法识别类型为 . 的管道阶段 您需要发布代码以获取它。作为一个单独的问题问可能会更好。只需在 cmets 上提及我,我也会尝试回答:) 【参考方案1】:

我在尝试从 python 中保存并将其导入 scala 时遇到同样的问题。

我想我会使用 SQL 来做我想做的事。

我也看到了I could use python .py file in Scala,但我还没有找到在 UDF 转换器中使用它的方法。

1234563关心,因为我需要 做python => scala。

【讨论】:

欢迎来到 Stack Overflow!如果您有新问题,请点击 按钮提出问题。如果您有足够的声誉,you may upvote 的问题。或者,将其“加星标”作为收藏夹,您将收到任何新答案的通知。

以上是关于Spark 管道中的 UDF的主要内容,如果未能解决你的问题,请参考以下文章

是否可以访问 spark.ml 管道中的估计器属性?

Pig如何实例化UDF对象

如果不使用spark-ml中的管道,交叉验证会更快吗?

在 Apache Spark 中通过管道运行 Windows 批处理文件

有啥方法可以在 Spark ML Pipeline 中序列化自定义 Transformer

雪花数据管道问题 - 特别是流问题