如果数组列中存在值,则过滤行
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)
注意:我正在使用 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)