如何解决如何检查包含数组的列是否等于我们在Spark DataFrame中提供的另一个数组?
我有一个DF包含数组的列。 每行的结构如下:
+---------------+------------+-----------+---------+-----------+-------------+
|table_name |table_schema|column_name|data_type|column_size|column_tokens|
+---------------+------------+-----------+---------+-----------+-------------+
|sales |demo |sales_id |int |100 |[sales,id] |
+---------------+------------+-----------+---------+-----------+-------------+
现在,我想查询是否任何行的column_tokens准确包含 [sales id],还给我。
我使用这样的查询来获取上面的DF,
selectedTableInfo.filter(array_contains(col("column_tokens"),"id")).show(100,false)
有什么方法可以进行数组匹配吗?
赞:
selectedTableInfo.filter(array_equals(col("column_tokens"),Seq("sales","id"))).show(100,false)
解决方法
只需将相等条件与array
函数一起使用。这是一个示例。
val df = spark.createDataFrame(Seq(("1",Seq("a","b")))).toDF("id","array")
df.show
+---+------+
| id| array|
+---+------+
| 1|[a,b]|
+---+------+
df.filter(col("array") === array(lit("a"),lit("b"))).show
+---+------+
| id| array|
+---+------+
| 1|[a,b]|
+---+------+
,
您还可以使用 isin()。
val df = spark.createDataFrame(
Seq(
("1","b")),("2",Seq("c","d"))
)
).toDF(
"id","sales"
)
df.show()
df.filter(
col("sales").isin(array(lit("a"),lit("b")))
).show()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。