实施以下代码后:
def ngram(s: String, inSep: String, outSep: String, n:Int): Set[String] = {
s.toLowerCase.split(inSep).sliding(n).map(_.sorted.mkString(outSep)).toSet
}
val fPath = "/user/root/data/data220K.txt"
val resultPath = "data/result220K"
val lines = sc.textFile(fPath) // lines: Array[String]
val ngramNo = 2
val result = lines.flatMap(line => ngram(line, " ", "+", ngramNo)).map(word => (word, 1)).reduceByKey((a, b) => a+b)
val sortedResult = result.map(pair => pair.swap).sortByKey(true)
sortedResult.count + "============================")
sortedResult.take(10)
sortedResult.saveAsTextFile(resultPath)
我使用此架构在HDFS中获取了大量文件: (Freq_Occurrencies,FieldA,FieldB)
可以加入该目录中的所有文件吗?每行都不同但我想只有一个文件按Freq_Occurrencies排序。有可能吗?
非常感谢!
答案 0 :(得分:0)
sortedResult
.coalesce(1, shuffle = true)
.saveAsTextFile(resultPath)`
coalesce
使Spark使用单个任务进行保存,因此只创建一个部分。当然,缺点是性能 - 所有数据都必须被拖放到单个执行器并使用单个线程保存。