Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何在Spark中使用saveastextfile生成制表符分隔的输出?_Scala_Apache Spark - Fatal编程技术网

Scala 如何在Spark中使用saveastextfile生成制表符分隔的输出?

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[(字符串,双

我使用的是Scala,我希望saveAsTextFile将结果直接保存为tab分隔,例如:

a 1
b 4
c 5
(空格为制表符)

我只想使用
savastextfile
(不打印),当我有like
RDD[(字符串,双精度)]
时,我不能使用

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"))

提供的答案是正确的。请接受它,这样我们就可以结束这个问题了!