我如何将此 UDF 翻译成 Pandas UDF
Posted
技术标签:
【中文标题】我如何将此 UDF 翻译成 Pandas UDF【英文标题】:How can i translate this UDF to Pandas UDF 【发布时间】:2020-01-23 14:23:36 【问题描述】:我在使用此函数时遇到了一些性能问题,如果字符串数组的字符串与 val
参数匹配,则该函数旨在返回 True
。我想把它翻译成 Pandas UDF。
def list_contains(val):
# Perfom what ListContains generated
def list_contains_udf(column_list):
for element in column_list:
if element.startswith(val):
return True
return False
return udf(list_contains_udf, BooleanType())
我怎样才能做到这一点?
【问题讨论】:
如果您使用的是 spark 2.4+,请检查 spark sql 内置函数是否存在:spark.apache.org/docs/latest/api/sql/index.html#exists 【参考方案1】:受@jxc 评论启发,尝试在Databricks 的单元格中使用下面的sql。
%sql
SELECT exists(column_list, element -> substr(element, 1, length(val)) == val)
代码element.startswith(val)
我理解使用SQL是使用substr
获取字符串element
的头部N(length(val)
)长度,并且是否等于val
self。
否则,请参考PySpark文档的pyspark.sql.UDFRegistration(sparkSession)
类,将类似的函数注册为UDF组合使用。
【讨论】:
以上是关于我如何将此 UDF 翻译成 Pandas UDF的主要内容,如果未能解决你的问题,请参考以下文章
如何在用户定义的函数(又名 udf)中返回 Pandas.Series?
如何将标量 Pyspark UDF 转换为 Pandas UDF?