【问题标题】:Saving The RDD pair in particular format in the output file将 RDD 对以特定格式保存在输出文件中
【发布时间】:2017-07-30 10:24:00
【问题描述】:
我有一个 JavaPairRDD 可以说数据类型
<Integer,List<Integer>>
当我做 data.saveAsTextFile("output")
输出将包含以下格式的数据:
(1,[1,2,3,4])
等等……
我希望在输出文件中有这样的内容:
1 1,2,3,4
i.e. 1\t1,2,3,4
任何帮助将不胜感激
【问题讨论】:
标签:
apache-spark
apache-spark-2.0
【解决方案1】:
您需要了解这里发生了什么。您有一个RDD[T,U],其中 T 和 U 是一些 obj 类型,将其读取为 T 和 U 的元组的 RDD。在此 RDD 上,当您调用 saveAsTextFile() 时,它实际上将 RDD 的每个元素转换为字符串,因此是文本文件作为输出生成。
现在,某个类型 T 的对象如何转换为字符串?通过调用 toString() 就可以了。这就是为什么你有 [] 代表列表,而 () 代表整个元组的原因。
解决方案,根据您的格式将 RDD 中的每个元素映射到一个字符串。我对 Java 语法不太熟悉,但对于 Scala,我会做类似的事情,
rdd.map(e=>s"${e._1}\t${e._2.mkString(",")}")
mkString 使用一些分隔符连接一个集合。
如果这有帮助,请告诉我。干杯。