ich eine Eingabedatei foo.txt
mit dem folgenden Inhalt haben:Scala-Funken (version1.5.2) Datenrahmen Split Fehler
c1|c2|c3|c4|c5|c6|c7|c8|
00| |1.0|1.0|9|27.0|0||
01|2|3.0|4.0|1|10.0|1|1|
Ich möchte verwandeln es zu einem Dataframe
, einige Sql
Abfragen durchführen:
var text = sc.textFile("foo.txt")
var header = text.first()
var rdd = text.filter(row => row != header)
case class Data(c1: String, c2: String, c3: String, c4: String, c5: String, c6: String, c7: String, c8: String)
Bis zu diesem Punkt alles in Ordnung ist, kommt das Problem im nächsten Satz:
var df = rdd.map(_.split("\\|")).map(p => Data(p(0), p(1), p(2), p(3), p(4), p(5), p(6), p(7))).toDF()
Wenn ich versuche, df
mit df.show
zu drucken, erhalte ich eine Fehlermeldung:
scala> df.show()
java.lang.ArrayIndexOutOfBoundsException: 7
Ich weiß, dass der Fehler aufgrund des geteilten Satzes sein könnte. Ich habe auch versucht foo.txt
mit folgenden Syntax zu spalten:
var df = rdd.map(_.split("""|""")).map(p => Data(p(0), p(1), p(2), p(3), p(4), p(5), p(6), p(7))).toDF()
Und dann bekomme ich so etwas wie diese:
scala> df.show()
+------+---------+----------+-----------+-----+-----------+----------------+----------------+
| c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 |
+------+---------+----------+-----------+-----+-----------+----------------+----------------+
| 0| 0| || | || 1| .| 0|
| 0| 1| || 2| || 3| .| 0|
+------+---------+----------+-----------+-----+-----------+----------------+----------------+
Daher meine Frage ist, wie kann ich richtig diese Datei passieren zu einem Datenrahmen.
EDIT: Der Fehler ist in der ersten Zeile aufgrund ||
Feld ohne Zwischenraum. Diese Art von Felddefinition, die von den Beispielen abhängt, funktioniert gut oder stürzt ab.
Ich kann den Fehler nicht reproduzieren, auf Spark 2.0 funktioniert es gut. (Keine ArrayIndexOutOfBoundsException auf df.show()) – jamborta
Sorry, ich habe vergessen zu kommentieren, dass es auf Spark 1.5.2 ist. Ich bearbeite die Frage – qwerty
Kannst du die Datei nicht in '.csv' umbenennen und direkt in ein' df' lesen? – pheeleeppoo