注意:我在Spark2.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') 但这在Spark2.4中是不可用的
我唯一的想法是爆炸,然后使用下面的代码,这是没有效率的。
df.filter(F.get_json_object(F.col("col1"), '$.key2') == 'val2')我想知道我能否做到这一点,而不爆炸在我的版本的火花(2.4.4)
发布于 2022-05-12 02:06:29
对于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)https://stackoverflow.com/questions/72209108
复制相似问题