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
您可以使用
map_filter
功能,如下所示。
df
.withColumn(
"filtered_map",
expr("size(map_filter(Maptype_col, (k, v) -> v > 1 ))")
)