[英]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)
,输出将进入工作程序的标准输出,而不是驱动程序的标准输出。
但我的代码给出的结果为:
actabckldgoaelppderoozaelppderbelueegnraelppeegnroozabcklaklw
因为data
是RDD[String]
(因为您正在执行flatMap
而不是map
),所以您会data.map(_.sorted)
所以当您执行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
这就是期望的输出!!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.