分享

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

dsy198816 发表于 2017-2-6 12:01:10 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 5 19448
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object SimpleApp {
    def main(args: Array[String]) {
        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内容为空这是为啥

已有(5)人评论

跳转到指定楼层
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")
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条