【问题标题】:How to reverse map and loop through keys and values in Scala Spark如何在 Scala Spark 中反转映射和循环键和值
【发布时间】:2019-11-03 18:38:01
【问题描述】:

我正在编写一个 Scala Spark 脚本,其中我将(Hive 分区)HDFS 路径存储为键,并将它们的基础文件计为值。我想编写一个 for 循环来检查文件路径是否存在(使用键)并且计数是否大于 0。我必须反转整个映射,因为我想开始检查最新的分区。

我找不到任何方法来反转地图并循环遍历它。 这是我的代码:

val paths = collection.mutable.Map[String, Float]()
status.foreach( x => paths += (x.getPath.toString -> fs.getContentSummary(new Path(x.getPath.toString).getFileCount() )

这是我打算做的:

//Reverse the map to make last element as first element
var result = ""
for ((k,v) <- paths) {
if(!fs.exists(new Path(k)) && v < 1)
  continue
else
  result = k
  break
}

【问题讨论】:

    标签: scala apache-spark dictionary collections hdfs


    【解决方案1】:

    如果答案适合您,请“投票”。

    你需要使用ListMap,然后根据key对map进行排序(基本上你可以反转map并执行进一步的操作)。

    导入 scala.collection.immutable.ListMap

    val paths_sortBy_key_asc = ListMap(paths.toSeq.sortBy(_._1) 1:*)

    or 
    

    val paths_sortBy_key_dsc = ListMap(paths.toSeq.sortBy(_._1) > _.1:*)

    希望对你有帮助!!

    【讨论】:

      【解决方案2】:

      有多种选择。

      1. 使用 TreeMap 构建数据结构。它是按键排序的。
      2. 将其转换为 seq 或 list 并对其进行排序。

      所有这些选项都在这里通过一个示例进行了概述。

      参考sort map link

      【讨论】:

        猜你喜欢
        • 2012-02-26
        • 1970-01-01
        • 1970-01-01
        • 2015-06-10
        • 2018-04-25
        • 2022-01-26
        • 1970-01-01
        • 1970-01-01
        • 2018-03-03
        相关资源
        最近更新 更多