dsy198816 发表于 2017-2-6 12:01:10

saveAsTextFile 这个函数有问题。。求教啊。。

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object SimpleApp {
    def main(args: Array) {
      val conf = new SparkConf().setAppName("Simple Application")
      val sc = new SparkContext(conf)
      val line = sc.textFile("README.md")

      val words = line.flatMap(line => line.split(" "))
      val counts = words.map(word => (word, 1)).reduceByKey{case(x, y) => x + y}
      counts.saveAsTextFile("result")
      sc.stop()
    }
}
这是书上的例子,保存在hdfs里的    /user/hadoop/result内容为空这是为啥

dsy198816 发表于 2017-2-6 12:26:40

啊我说错了,问题改一下,结果是有的,但是输出结果到了多个文件,我想问的是有别的办法吗?我只想输出结果到一个文件。

w517424787 发表于 2017-2-6 13:38:34

你可以在sc.textFile这个函数中重新设定分区数,可以写成sc.textFile("README.md",1),这样结果就只会保存到一个文件中!

sstutu 发表于 2017-2-6 13:43:21

参考这个试试
spark saveastextfile 完后会自动生成文件名part-00000--part-0n ,怎么自定义名称呢?
http://www.aboutyun.com/forum.php?mod=viewthread&tid=18296


dsy198816 发表于 2017-2-7 10:15:00

啊感谢楼上的,result3.repartition(1).saveAsTextFile("result") 确实存储到了一个文件里了。
但我又有新的问题了,我只需要top(n), 但是top返回的就不是rdd了,已经不能调用repartition(1) saveAsTextFile("result") 这些函数啦。比如说:

val result3 = result2.map((_,1)).reduceByKey(_+_).sortBy(_._2, false).top(10)

result3.repartition(1).saveAsTextFile("result")

这样就是编译不过去的,因为top(10)返回的的对象没有这些接口函数

ledasion 发表于 2017-2-10 17:19:20

可以使用 makeRDD 或者parallelize 将数组再次转化成 rdd 保存
val result3 = result2.map((_,1)).reduceByKey(_+_).sortBy(_._2, false).top(10)
val result4 = sc.makeRDD(result3)
result4.repartition(1).saveAsTextFile("result")
页: [1]
查看完整版本: saveAsTextFile 这个函数有问题。。求教啊。。