我们如何使用 Apache Spark scala 对 txt 文件中的数据进行逐行排序?

how we can sort line by line data from txt file using Apache Spark scala?

log.txt 文件包含:

cat,black,dog,apple,red
zoo,apple,red,blue,green
apple,green,zoo,black,walk

我的代码是:

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.rdd.RDD

object ScalaApp {
def main(args: Array[String]) {
val sc = new SparkContext("local[4]", "Program")

val data = sc.textFile("data.txt").flatMap(line=> line.split(","))
val d1=data.map(_.sorted)
d1.foreach(print _)
 }
 }

我想要以下结果:

  apple,black,cat,dog,red
  apple,blue,green,red,zoo
  apple,black,green,walk,zoo 

但我的代码给出的结果是:

 actabckldgoaelppderoozaelppderbelueegnraelppeegnroozabcklaklw

请提供任何解决方案!

必须先按行分割,再按","

val data = sc.textFile("data.txt")
             .map(word=> word.split(",")).map(_.sorted)
data.collect()

尝试将定义 d1 的行更改为:

val d1=data.map(_.sorted)
d1.foreach(println _)

这应该创建一个 RDD[Array[String]],其中 RDD 的每个元素都是一个数组,其中包含按升序排序的一行文本的标记:

val data = sc.textFile("log.txt").map(line => line.split(",").sorted)

此外,请注意,如果您执行 data.foreach(println),输出将转到工作人员的标准输出,而不是驱动程序的标准输出。

but my code give result as :

actabckldgoaelppderoozaelppderbelueegnraelppeegnroozabcklaklw

你弄得一团糟,因为 data 是一个 RDD[String](因为你做的是 flatMap 而不是 map。)所以当你这样做时data.map(_.sorted) 它将对 data 中的每个 String 进行排序,例如"apple" 将变为 "aelpp",等等。使用 map 而不是 flatMap

终于解决了这个问题,也想和大家分享一下:

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.rdd.RDD

object ScalaApp {
def main(args: Array[String]) {
val sc = new SparkContext("local[4]", "Program")
val data = sc.textFile("data.txt").flatMap(_.split("\n"))
    val lc=data.count().toInt
val d1=data.flatMap(line=>line.split(",").sorted)
d1.foreach(println)
val a=d1.toArray
var loop=0
    for(i<-0 to lc-1){
    println(a(loop)+" "+a(loop+1)+" "+a(loop+2)+" "+a(loop+3)+" "+a(loop+4)+" "+a(loop+5))
    loop=loop+6
 }
 }
 }

data.txt 文件包含:

cat,black,dog,apple,red,cat
zoo,apple,red,blue,green,cat
apple,green,zoo,black,walk,cat

结果是:

apple black cat cat dog red
apple blue cat green red zoo
apple black cat green walk zoo

这就是想要的输出!!