【问题标题】:can't define a udf inside pyspark project无法在 pyspark 项目中定义 udf
【发布时间】:2017-01-31 04:37:15
【问题描述】:

我有一个使用 pyspark 的 python 项目,我正在尝试在 spark 项目中(不在我的 python 项目中)定义一个 udf 函数,特别是在 spark\python\pyspark\ml\tuning.py 中,但我遇到了酸洗问题。它无法加载udf。 代码:

from pyspark.sql.functions import udf, log
test_udf = udf(lambda x : -x[1], returnType=FloatType())
d = data.withColumn("new_col", test_udf(data["x"]))
d.show()

当我尝试 d.show() 时,我得到了未知属性 test_udf 的异常

在我的 python 项目中,我定义了许多 udf,它运行良好。

【问题讨论】:

  • 这只是将其输入堆栈溢出时的拼写错误,还是您的代码中也有此错误? ltest_udf( 应该是 test_udf( 对吧?
  • 试试这个,去掉returnType=,直接写成udf(lambda x : -x, FloatType())

标签: python pyspark udf apache-spark-ml


【解决方案1】:

将以下内容添加到您的代码中。它无法识别数据类型。

from pyspark.sql.types import *

如果这有帮助,请告诉我。谢谢。

【讨论】:

  • 它没有帮助。看到我上面的答案,但还是谢谢
  • 哦,我明白了,我在 shell 中尝试过了,它无法识别数据类型。所以不得不添加那个导入。感谢分享答案。
【解决方案2】:

发现有2个问题

1) 出于某种原因它不喜欢 returnType=FloatType() 我需要将其转换为 FloatType() 尽管这是签名

2) x 列中的数据是一个向量,由于某种原因我不得不将其转换为浮点数

工作代码:

from pyspark.sql.functions import udf, log
test_udf = udf(lambda x : -float(x[1]), FloatType())
d = data.withColumn("new_col", test_udf(data["x"]))
d.show()

【讨论】:

    猜你喜欢
    • 2021-06-11
    • 1970-01-01
    • 2019-01-25
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 2021-09-30
    • 1970-01-01
    相关资源
    最近更新 更多