我如何将此 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))长度,并且是否等于valself。

否则,请参考PySpark文档的pyspark.sql.UDFRegistration(sparkSession)类,将类似的函数注册为UDF组合使用。

【讨论】:

以上是关于我如何将此 UDF 翻译成 Pandas UDF的主要内容,如果未能解决你的问题,请参考以下文章

如何将此字符串拆分为 UDF

如何在用户定义的函数(又名 udf)中返回 Pandas.Series?

结构化流是如何执行 pandas_udf 的?

如何将标量 Pyspark UDF 转换为 Pandas UDF?

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

如何在 PySpark 中将多个参数传递给 Pandas UDF?