首页 > 解决方案 > 如何在 Scala Spark 中反向映射和循环键和值

问题描述

我正在编写一个 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
}

标签: scalaapache-sparkdictionarycollectionshdfs

解决方案


有多种选择。

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

此处通过示例概述了所有这些选项。

参考排序图链接


推荐阅读