如何检查包含数组的列是否等于sparkDataframe中我们提供的另一个数组?

h9a6wy2h  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(407)

我有一个包含数组的df列。每行的结构如下所示:

+---------------+------------+-----------+---------+-----------+-------------+
|table_name     |table_schema|column_name|data_type|column_size|column_tokens|
+---------------+------------+-----------+---------+-----------+-------------+
|sales          |demo        |sales_id   |int      |100        |[sales, id]  |
+---------------+------------+-----------+---------+-----------+-------------+

现在我想查询任何行的列\u 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)
zhte4eai

zhte4eai1#

也可以使用isin()。

val df = spark.createDataFrame(
    Seq(
        ("1", Seq("a", "b")), 
        ("2", Seq("c", "d"))
    )
).toDF(
    "id", 
    "sales"
)
df.show()

df.filter(
    col("sales").isin(array(lit("a"), lit("b")))
).show()
3wabscal

3wabscal2#

只需使用与 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]|
+---+------+

相关问题