如果数组列中存在值,则过滤行

Filter rows if value exists in array column

注意:我正在使用 Spark 2.4.4

我有以下数据集

col1

['{"key1": "val1"}','{"key2": "val2"}']
['{"key1": "val1"}','{"key2": "val3"}']

本质上,我想过滤掉 key2 不是 val2 的所有行。

col1

['{"key1": "val1"}','{"key2": "val2"}']

在 trino SQL 中,我是这样做的:

any_match(col1, x -> json_extract_scalar(x, '$.key2') = 'val2') 

但这在 Spark 2.4 中不可用

我唯一的想法是分解然后使用效率不高的以下代码。

df.filter(F.get_json_object(F.col("col1"), '$.key2') == 'val2')

我想知道我是否可以在我的 spark (2.4.4) 版本中做到这一点而不会爆炸

对于spark >=2.4,可以使用spark SQL的exists函数。

df = df.withColumn('flag', F.expr('exists(col1, x -> get_json_object(x, "$.key2") == "val2")')) \
    .filter(F.col('flag')).drop('flag')
df.show(truncate=False)