咖喱UDF Pysp

2024-05-16 09:40:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在spark中实现一个UDF;它可以同时接受文本和列作为参数。为了达到这个目的,我相信我可以使用一个咖喱UDF。在

该函数用于将字符串文本与DataFrame列中的每个值相匹配。我已经总结了密码以下:在

def matching(match_string_1):
    def matching_inner(match_string_2):
        return difflib.SequenceMatcher(None, match_string_1, match_string_2).ratio()
    return matching

hc.udf.register("matching", matching)
matching_udf = F.udf(matching, StringType())

df_matched = df.withColumn("matching_score", matching_udf(lit("match_string"))(df.column))
  • "match_string"实际上是分配给我正在迭代的列表的值。在

不幸的是,这并不像我所希望的那样有效;我正在接受

"TypeError: 'Column' object is not callable".

我想我没有正确调用这个函数。在


Tags: 函数字符串文本目的df参数stringreturn
1条回答
网友
1楼 · 发布于 2024-05-16 09:40:35

应该是这样的:

def matching(match_string_1):
    def matching_inner(match_string_2):
        return difflib.SequenceMatcher(
            a=match_string_1, b=match_string_2).ratio()

    # Here create udf.
    return F.udf(matching_inner, StringType())

df.withColumn("matching_score", matching("match_string")(df.column))

如果要支持match_string_1Column参数,则必须将其重写如下:

^{pr2}$

当前代码不工作,matching_udf是,UDF和matching_udf(lit("match_string"))创建一个Column表达式,而不是调用内部函数。在

相关问题 更多 >