在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 过滤数据框