Scala 如何在Spark中使用saveastextfile生成制表符分隔的输出?
我使用的是Scala,我希望saveAsTextFile将结果直接保存为tab分隔,例如:Scala 如何在Spark中使用saveastextfile生成制表符分隔的输出?,scala,apache-spark,Scala,Apache Spark,我使用的是Scala,我希望saveAsTextFile将结果直接保存为tab分隔,例如: a 1 b 4 c 5 (空格为制表符) 我只想使用savastextfile(不打印),当我有likeRDD[(字符串,双精度)]时,我不能使用 ranks = ranks.map( f => f._1 +"\t"+f._2) 它说类型不匹配,我猜是因为f.\u 1是字符串,而f.\u 2是双精度的?代码中唯一的错误是试图将映射结果重新分配到相同的秩变量中-我假设秩具有类型RDD[(字符串,双
a 1
b 4
c 5
(空格为制表符)
我只想使用savastextfile
(不打印),当我有likeRDD[(字符串,双精度)]
时,我不能使用
ranks = ranks.map( f => f._1 +"\t"+f._2)
它说类型不匹配,我猜是因为
f.\u 1
是字符串,而f.\u 2
是双精度的?代码中唯一的错误是试图将映射结果重新分配到相同的秩
变量中-我假设秩
具有类型RDD[(字符串,双精度)]
因此,实际上您不能为其分配类型为RDD[String]
的值。只需使用单独的变量:
val ranks: RDD[(String, Double)] = sc.parallelize(Seq(("a", 1D), ("b", 4D)))
val tabSeparated: RDD[String] = ranks.map(f => f._1 +"\t"+f._2)
tabSeparated.saveAsTextFile("./test.tsv")
一般来说,使用val
s而不是var
s来防止此类错误几乎总是更好的
注意:将元组(任意大小)转换为制表符分隔的字符串的一种更简洁的方法:
ranks.map(_.productIterator.mkString("\t"))
提供的答案是正确的。请接受它,这样我们就可以结束这个问题了!