pyspark - 在collect_list聚合创建的hive数组中搜索列值

时间:2017-08-01 03:29:15

标签: pyspark-sql

我正在使用一个带有一个聚合列的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'))

1 个答案:

答案 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|
+---+--------------------+------+

希望这有帮助。