按 pyspark 数据框中的映射类型值过滤

问题描述 投票:0回答:1

Spark 数据框:

Text_col             Maptype_col
what is SO           {3:1, 5:1, 1:1}
what is spark        {3:2, 5:1}

我想过滤(删除)Maptype_col 中至少有一个条目的值大于 1 的行。

我编写了以下代码,但每一行的click_filter中的值为空:

@udf(returnType=BooleanType())
def filter_map(col_map):
    retval = 0
    for k in col_map:
        if col_map[k] > 1: retval = 1
    return retval

newudf = origudf.withColumn("filtered_map"),  filter_map(F.col("Maptype_col"))

输出为:

Text_col             Maptype_col       filtered_map
what is SO           {3:1, 5:1, 1:1}   null
what is spark        {3:2, 5:1}        null

预期输出:

Text_col             Maptype_col       filtered_map
what is SO           {3:1, 5:1, 1:1}   0
what is spark        {3:2, 5:1}        1
apache-spark pyspark
1个回答
0
投票

您可以使用

map_filter
功能,如下所示。

df
.withColumn(
    "filtered_map", 
    expr("size(map_filter(Maptype_col, (k, v) -> v > 1 ))")
)
© www.soinside.com 2019 - 2024. All rights reserved.