【问题标题】:how to pick the rows from dataframe comparing with hashmap如何从数据框中选择行与哈希图进行比较
【发布时间】:2019-01-24 13:15:06
【问题描述】:

我有两个数据框,

df1

      id         slt     sln       elt      eln        start      end 

df2

     id           evt         slt    sln     speed     detector

哈希图

Map(351608084643945 -> List(1544497916,1544497916), 351608084643944 -> List(1544498103,1544498093))

我想比较列表中的值,如果列表中的两个值匹配,那么我想从该 id 的数据帧(df1)中获取完整的行。 否则,从该 id 的 df2 开始的整行。

数据框和地图都将具有不同且唯一的 ID。

【问题讨论】:

    标签: scala hashmap apache-spark-sql


    【解决方案1】:

    如果我理解正确,您想要遍历您的哈希映射并且对于条目,您想要检查列表中的值是否所有值都相同。如果列表具有与您希望来自 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))
            }
          })
    

    【讨论】:

      【解决方案2】:

      两步:

      1. 第一步:将hashmap拆分成两个hashmap,一个是匹配的hashmap,一个是不匹配的hashmap。
      2. 第二步:使用匹配的hashmap与id上的df1连接,得到匹配的df1。并使用不匹配的 hashmap 在 id 上加入 df2,然后得到不匹配的 df2。

      【讨论】:

        猜你喜欢
        • 2013-12-21
        • 2019-06-24
        • 2012-08-14
        • 2019-03-03
        • 2017-03-27
        • 1970-01-01
        • 2012-10-25
        • 2015-05-13
        • 2019-09-24
        相关资源
        最近更新 更多