使用Spark/Java的isin()函数

使用Spark/Java的isin()函数,java,dataframe,apache-spark,isin,Java,Dataframe,Apache Spark,Isin,我有以下两个数据帧 dataframe1 ┌────────────┬─────────────┬──────────────┐ │idZones │Longitude │latitude | ├────────────┼─────────────┼──────────────┤ |[50,30,10] |-7.073781666 |33.826661 | └────────────┴─────────────┴──────────────┘ dataframe

我有以下两个数据帧

dataframe1
┌────────────┬─────────────┬──────────────┐
│idZones     │Longitude    │latitude      |
├────────────┼─────────────┼──────────────┤
|[50,30,10]  |-7.073781666 |33.826661     |
└────────────┴─────────────┴──────────────┘
dataframe2
┌────────────┬─────────────┬──────────────┐
│id          │col1         │col2          │
├────────────┼─────────────┼──────────────┤
│10          │aaaaaaaaaaaa │bb32          │
│90          │ppp          │cc20          │
└────────────┴─────────────┴──────────────┘
我想要以下输出

┌────────────┬─────────────┬──────────────┐
│id          │col1         |col2          │
├────────────┼─────────────┼──────────────┤
│10          │aaaaaaaaaaaa │bb32          │
└────────────┴─────────────┴──────────────┘
我使用以下代码

 dataframe1.join(dataframe2,dataframe2.col("id").isin(dataframe1.col("idZones")));
注意idZones列是一个数组[int]

我得到这个错误

cannot resolve '(`id` IN (dataframe1.`idZones`))' due to data type mismatch: Arguments must be same type but were: int != array<int>;;
由于数据类型不匹配,
无法解析“(`id`IN(dataframe1.`idZones`)”)”:参数必须是相同的类型,但为:int!=数组;;
我需要你的帮助


谢谢

尝试将
isin
替换为
array\u contains

dataframe1.join(dataframe2, expr("array_contains(idZones, id)"))
(固定代码,谢谢@shantanukher)


另一种方法是,您只需分解数据帧1.col(“idZones”),然后进行连接。

正如@Rayan所建议的,您可以在将数据帧1与数据帧2连接之前使用分解

创建数据帧-

val dataframe1 = Seq((Array(50,30,10),-7,30)).toDF("idZones","longitude","latitude")

val dataframe2 = Seq((10,"aaaaa","bb32"),(90,"ppp","cc20")).toDF("id","col1","col2")
爆炸逻辑-

dataframe1.select(explode($"idZones").as("idZones")).join(dataframe2, $"idZones" === dataframe2("id")).show(false)
输出-

+-------+---+-----+----+
|idZones|id |col1 |col2|
+-------+---+-----+----+
|10     |10 |aaaaa|bb32|
+-------+---+-----+----+

感谢您的回复。但无法解析“列”中的方法“array\u contains”,我想获取id位于idZones中的dataframe2行。请更正数组\u contains的语法-dataframe1。加入(dataframe2,expr(“array\u contains(idZones,id)”)。显示(false)