Pyspark:检查数组类型列是不是包含列表中的值[重复]
Posted
技术标签:
【中文标题】Pyspark:检查数组类型列是不是包含列表中的值[重复]【英文标题】:Pyspark: Check if Array Type Column Contains a Value From a List [duplicate]Pyspark:检查数组类型列是否包含列表中的值[重复] 【发布时间】:2020-11-17 16:47:19 【问题描述】:有没有办法检查ArrayType
列是否包含列表中的值?它不必是一个实际的 python 列表,只要是 spark 可以理解的东西。我不想使用udf
,因为最好避免使用它们。
比如我有数据:
+-------------+
|category_code|
+-------------+
| [88]|
| [20, 50]|
+-------------+
我想检查[43, 44, 50]
是否在每一行中,所以输出将是:
+-------------+-----+
|category_code| test|
+-------------+-----+
| [88]|false|
| [20, 50]| true|
+-------------+-----+
我知道pyspark.sql.functions.array_contains()
函数,但这仅允许检查一个值而不是值列表。
编辑:这是针对 Spark 2.4 的
【问题讨论】:
最好是 spark 2.4,但如果 spark 3.0 有解决方案,我会很高兴听到的。 @mazaneicha 我不认为这是重复的,因为 Spark SQL 和 pyspark 是不同的 API @fungie127 查看引用帖子中的最后一个答案。 【参考方案1】:使用arrays_overlap函数&可以从Spark 2.4.0
获得。
检查下面的代码。
>>> df.show()
+-------------+
|category_code|
+-------------+
| [20, 50]|
| [88]|
+-------------+
df.withColumn("list",F.array([F.lit(i) for i in [40,44,50]])) \
.withColumn("test",F.arrays_overlap(F.col("category_code"),F.col("list"))) \
.drop("list") \
.show()
+-------------+-----+
|category_code| test|
+-------------+-----+
| [20, 50]| true|
| [88]|false|
+-------------+-----+
【讨论】:
以上是关于Pyspark:检查数组类型列是不是包含列表中的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章
检查列 pyspark df 的值是不是存在于其他列 pyspark df
Spark DataFrame ArrayType 或 MapType 用于检查列中的值