scala – spark中的saveAsTextFile方法
在我的项目中,我有三个输入文件,并将文件名称为args(0)到args(2),我也有一个输出文件名为args(3),在源代码中,我使用
val sc = new SparkContext() var log = sc.textFile(args(0)) for(i <- 1 until args.size - 1) log = log.union(sc.textFile(args(i))) 我对日志没有任何作用,但是使用它将其保存为文本文件 log.coalesce(1,true).saveAsTextFile(args(args.size - 1)) 但它仍然保存为3文件作为00000部分,部分00001,部分00002,那么有什么方法可以将三个输入文件保存到输出文件? 解决方法
拥有多个输出文件是Hadoop或Spark等多机群集的标准行为.输出文件的数量取决于reducer的数量.
如何在Hadoop中“解决”它: 如何在Spark中“解决”: 您也可以在这里获得一个很好的信息: 所以,你是合适的合并(1,真实).但是,效率非常低.有趣的是(正如@climbage在他的评论中提到的),如果你在本地运行它,你的代码就可以了. 您可能尝试的是先读取文件然后保存输出. ... val sc = new SparkContext() var str = new String("") for(i <- 0 until args.size - 1){ val file = sc.textFile(args(i)) file.foreach(line => str+= line) } //and now you might save the content str.coalesce(1,true).saveAsTextFile("out") 注意:此代码效率极低,仅适用于小文件!你需要提出一个更好的代码.我不会尝试减少文件数量,而是处理多个输出文件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |