2015-10-01 3 views
0

Файл log.txt содержит:Как мы можем сортировать строки за строкой из txt-файла с помощью Apache Spark scala?

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 

любезно предоставит любое решение!

+1

«Дайте мне ошибки», какие ошибки? Кроме того, почему выбрать только первый и пятый слова для сортировки? –

ответ

0

наконец я решил эту проблему и хочу поделиться с вами тоже:

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 

И это был желаемый выход !!

1

Вы должны сначала раскол по линии, затем «»

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

Попробуйте изменить строку, определяющую d1 к:

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

Это должно создать RDD[Array[String]] где каждый элемент RDD представляет собой массив, содержащий токены строки текста, отсортированные по возрастанию:

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

Кроме того, имейте в виду, что если вы сделаете data.foreach(println), выход будет передан на рабочий стол, а не на драйвер.

, но мой код дает результата, как: (., Потому что вы делаете flatMap вместо map)

actabckldgoaelppderoozaelppderbelueegnraelppeegnroozabcklaklw

Вы получаете тот беспорядок, потому что data это RDD[String] Так когда вы делаете data.map(_.sorted), он будет сортировать каждый String в data, например «яблоко» станет «aelpp» и т. д. Используйте map вместо flatMap.

Смежные вопросы