在pyspark的pandas_udf中使用外部库

Posted

技术标签:

【中文标题】在pyspark的pandas_udf中使用外部库【英文标题】:Use external library in pandas_udf in pyspark 【发布时间】:2019-08-29 08:43:21 【问题描述】:

可以在 pandas_udf 中使用像 textdistance 这样的外部库吗?我试过了,我得到了这个错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我已尝试使用 Spark 版本 2.3.1。

【问题讨论】:

【参考方案1】:

您可以将textdistance 与您自己的代码一起打包(使用setup.py 和bdist_egg 构建一个egg 文件),并在运行spark 时使用选项--py-files 指定最终包。

顺便说一句,错误消息似乎与 textdistance 完全无关。

【讨论】:

【参考方案2】:

您可以使用 Spark UDF,例如实现 Ratcliff-Obershelp 函数:

import textdistance

def my_ro(s1,s2):
  d = textdistance.ratcliff_obershelp(s1,s2)
  return d

spark.udf.register("my_ro", my_ro, FloatType())

spark.sql("SELECT word1, word2, my_ro(word1,word2) as ro FROM spark_df")\
.show(100,False)

【讨论】:

以上是关于在pyspark的pandas_udf中使用外部库的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Pyspark 中使用 @pandas_udf 返回多个数据帧?

在 PySpark 中使用 pandas_udf 时无法填充数组

在 pyspark 中使用 pandas_udf 过滤数据框

PySpark中pandas_udf的隐式模式?

pandas_udf 与 pyspark 3.0 的 scipiy.find_peaks 结果不一致

PySpark。将 Dataframe 传递给 pandas_udf 并返回一个系列