联合目录中的所有文件并基于第一列进行排序

pkbketx9  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(395)

执行以下代码后:

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\u occurrences,fielda,fieldb)
是否可以加入该目录中的所有文件?每一行都是不同的,但我只希望有一个文件按频率排序。有可能吗?
非常感谢!

khbbv19g

khbbv19g1#

sortedResult
  .coalesce(1, shuffle = true)
  .saveAsTextFile(resultPath)`
``` `coalesce` 使spark使用单个任务进行保存,从而仅创建一个零件。当然,缺点是性能—所有数据都必须被洗牌到单个执行器,并使用单个线程保存。

相关问题