我有一个包含多个数据结构的RDD,而其中一个数据结构是Map[String, Int]
。
为了使其易于可视化,我在地图转换后得到以下内容:
val data = ... // This is a RDD[Map[String, Int]]
在此RDD的其中一个元素中,Map包含以下内容:
*key value*
map_id -> 7753
Oscar -> 39
Jaden -> 13
Thomas -> 1
Chris -> 52
然后它在RDD的其他元素中包含其他名称和数字,每个地图包含一个map_id
。无论如何,如果我只是做data.saveAsTextFile(path)
,我将在我的文件中得到以下输出:
Map(map_id -> 7753, Oscar -> 39, Jaden -> 13, Thomas -> 1, Chris -> 52)
Map(...)
Map(...)
但是,我想将其格式化如下:
---------------------------
map_id: 7753
---------------------------
Oscar: 39
Jaden: 13
Thomas: 1
Chris: 52
---------------------------
map_id: <some other id>
---------------------------
Name: nbr
Name2: nbr2
基本上,map_id
作为某种标题,然后是内容,一行空格,然后是下一个元素。
对于我的问题,data
RDD只有两个选项,另存为文本文件或目标文件,我认为这两个选项都不支持我自定义格式。我怎么能这样做?
答案 0 :(得分:3)
您可以map
到String
并撰写结果。例如:
def format(map: Map[String, Int]): String = {
val id = map.get("map_id").map(_.toString).getOrElse("unknown")
val content = map.collect {
case (k, v) if k != "map_id" => s"$k: $v"
}.mkString("\n")
s"""|---------------------------
|map_id: $id
|-------------------------------
|$content
""".stripMargin
}
data.map(format(_)).saveAsTextFile(path)