【问题标题】:isin() function using Spark / Java使用 Spark / Java 的 isin() 函数
【发布时间】:2020-10-29 07:56:54
【问题描述】:

我有以下两个数据框。

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>;;

我需要你的帮助

谢谢

【问题讨论】:

    标签: java dataframe apache-spark isin


    【解决方案1】:

    尝试将isin 替换为array_contains

    dataframe1.join(dataframe2, expr("array_contains(idZones, id)"))
    

    (固定代码,感谢@Shantanu Kher)

    另一种方式,你可以只explodedataframe1.col("idZones"),然后加入。

    【讨论】:

    • 感谢您的回复。但无法解析 'Column' 中的方法 'array_contains' ,我想采用 dataframe2 的行,其中 id 位于 idZones 中。
    • array_contains 的正确语法 - dataframe1.join(dataframe2, expr("array_contains(idZones, id)")).show(false)
    【解决方案2】:

    正如@Rayan 建议的那样,您可以在将 dataframe1 与 dataframe2 连接之前使用 explode

    创建数据框 -

    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|
    +-------+---+-----+----+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 2020-10-30
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      相关资源
      最近更新 更多