2017-01-24 3 views
0

Ich habe ein Textdaten wie untenSpark-RDD-Mapping Fragen

 
no1  1|3|4 
no2  4|5|6 

und ich möchte die obigen Daten, wie unter Verwendung von Funken RDD und scala Sprache zu transformieren.

 
no1  1 
no1  3 
no1  4 
no2  4 
no2  5 
no2  6 

Ich bin sehr neu in Spark und Scala. Und ich kann kein Beispiel dafür finden.

Antwort

4

Ich empfehle Ihnen, die Datei als Datenrahmen zu lesen, deren API in der zukünftigen Spark-Version als RDD API mehr Gewicht haben wird. Und mit einem Datenrahmen, die Aufgabe, die Sie fragen, ist recht unkompliziert mit split und explode Funktionen:

val df = Seq(("no1", "1|3|4"), ("no2", "4|5|6")).toDF("A", "B") 
// df: org.apache.spark.sql.DataFrame = [A: string, B: string] 

df.show 
+---+-----+ 
| A| B| 
+---+-----+ 
|no1|1|3|4| 
|no2|4|5|6| 
+---+-----+ 


df.withColumn("B", explode(split($"B", "\\|"))).show 
+---+---+ 
| A| B| 
+---+---+ 
|no1| 1| 
|no1| 3| 
|no1| 4| 
|no2| 4| 
|no2| 5| 
|no2| 6| 
+---+---+ 
+0

Dank für Ihren Kommentar. Wenn ich eine Daten-TXT-Datei habe und sie eingegeben haben möchte (nicht manuell eingeben), wie erreiche ich den Befehl für eine vom Benutzer eingegebene Datei? – sclee1

+0

@ sclee1 durch Lernen Spark. Ich bin nicht abfällig, es ist nur du kannst nicht erwarten, deine Anwendung nur aus einer Abfolge von Fragen zu [SO] zu schreiben. Jedes Spark-Tutorial behandelt das Lesen aus einer Datei. –

+0

Abhängig von Ihrer Spark-Version unterscheidet sich das Lesen von einer Datei. Für spark 2+ finde ich 'spark.read.option (" header "," true "). Option (" inferSchema "," true "). Csv (deine Datei)' um bequem zu benutzen zu sein. – Psidom