saveAsTextFile 这个函数有问题。。求教啊。。
import org.apache.spark.SparkContextimport 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内容为空这是为啥 啊我说错了,问题改一下,结果是有的,但是输出结果到了多个文件,我想问的是有别的办法吗?我只想输出结果到一个文件。 你可以在sc.textFile这个函数中重新设定分区数,可以写成sc.textFile("README.md",1),这样结果就只会保存到一个文件中! 参考这个试试
spark saveastextfile 完后会自动生成文件名part-00000--part-0n ,怎么自定义名称呢?
http://www.aboutyun.com/forum.php?mod=viewthread&tid=18296
啊感谢楼上的,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)返回的的对象没有这些接口函数 可以使用 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]