我正在使用一个带有一个聚合列的py火花数据帧使用collect_list,我必须在该收集列表列中搜索另一个数据帧列值,我创建了一个UDF,如下所示,但它会因为阶段失败而失败
UDF:
client_assertion_type
def udf_test(arr,x)
if arr is None:
return None
if x is None:
return None
for e in arr:
if e == None:
return False
elif (e == x):
return True
else:
return False
上述步骤失败。在此步骤之前,所有内容都已缓存并正常运行。上述步骤还包含使用这两个数据帧的连接。
示例输入数据:
dataframe.filter(udf(col('array_column),col('value_column'))
答案 0 :(得分:0)
简单的解决方案是使用带有expr函数的array_contains,
Let's say, array_column => pageid_list and value_column => pageid
from pyspark.sql.functions import expr,array_contains
df3.filter(F.expr("array_contains(pageid_list,pageid)")).show()
+---+--------------------+------+
| id| pageid_list|pageid|
+---+--------------------+------+
| 12|[1001, 1001, 1002...| 1002|
+---+--------------------+------+
希望这有帮助。