Scala 如何与hashmap相比从dataframe中选取行

Scala 如何与hashmap相比从dataframe中选取行,scala,hashmap,apache-spark-sql,Scala,Hashmap,Apache Spark Sql,我有两个数据帧 df1 df2 哈希映射 Map(351608084643945 -> List(1544497916,1544497916), 351608084643944 -> List(1544498103,1544498093)) 我想比较列表中的值,如果列表中的两个值匹配,那么我想从该id的dataframe(df1)获得完整的行。 否则,该id的df2的整行 数据帧和映射都将具有不同且唯一的id。如果我理解正确,您希望遍历哈希映射,并且对于条目,您希望检查列表中的

我有两个数据帧

df1

df2

哈希映射

Map(351608084643945 -> List(1544497916,1544497916), 351608084643944 -> List(1544498103,1544498093))
我想比较列表中的值,如果列表中的两个值匹配,那么我想从该id的dataframe(df1)获得完整的行。 否则,该id的df2的整行


数据帧和映射都将具有不同且唯一的id。

如果我理解正确,您希望遍历哈希映射,并且对于条目,您希望检查列表中的值是否具有所有相同的值。若列表中的元素和您希望从df1获取数据的元素相同,那个么就从df2获取该键的数据。如果这是你想要的,下面是相同的代码

hashMap.foreach(x => {
        var key = x._1.toString
        var valueElements = x._2.toList
        if (valueElements.forall(_ == valueElements.head)) {
          df1.filter($"id".equalTo(key))
        } else {
          df2.filter($"id".equalTo(key))
        }
      })
两个步骤:

  • 第一步:将hashmap拆分为两个hashmap,一个是匹配的hashmap,另一个是不匹配的hashmap
  • 第二步:使用匹配的hashmap在id上与df1连接,然后得到匹配的df1。并使用不匹配的hashmap在id上与df2连接,然后得到不匹配的df2
    Map(351608084643945 -> List(1544497916,1544497916), 351608084643944 -> List(1544498103,1544498093))
    
    hashMap.foreach(x => {
            var key = x._1.toString
            var valueElements = x._2.toList
            if (valueElements.forall(_ == valueElements.head)) {
              df1.filter($"id".equalTo(key))
            } else {
              df2.filter($"id".equalTo(key))
            }
          })