Ich habe eine Textdatei auf HDFS und möchte sie in Spark in einen Datenrahmen konvertieren.
Ich verwende den Spark-Kontext, um die Datei zu laden und dann zu versuchen, einzelne Spalten aus dieser Datei zu erzeugen.
%Vor%Nachdem ich dies getan habe, versuche ich die folgende Operation.
%Vor%Ich erhalte Probleme, da die Elemente in myFile1 RDD jetzt Array-Typ sind.
Wie kann ich dieses Problem lösen?
Aktualisieren - ab Spark 1.6 können Sie einfach die integrierte csv-Datenquelle verwenden:
%Vor%Sie können auch verschiedene Optionen verwenden, um die CSV-Analyse zu steuern, z. B .:
%Vor% Für die Spark-Version & lt; 1.6 :
Am einfachsten ist es, spark-csv zu verwenden - es in Ihre Abhängigkeiten zu integrieren und der README zu folgen, um ein benutzerdefiniertes Trennzeichen zu setzen ( ;
), kann CSV-Header lesen (wenn Sie sie haben), und kann das Schema Typen (mit den Kosten eines zusätzlichen Scan der Daten) ableiten.
Wenn Sie das Schema kennen, können Sie alternativ eine Fallklasse erstellen, die es darstellt, und Ihre RDD-Elemente in Instanzen dieser Klasse abbilden, bevor Sie sie in einen Datenrahmen umwandeln, z. B .:
%Vor%Ich habe verschiedene Möglichkeiten zum Erstellen von Dataframe aus Textdatei
angegeben %Vor%Ich weiß, dass ich ziemlich spät bin, um das zu beantworten, aber ich habe eine andere Antwort gefunden:
%Vor%Sie können eine Datei lesen, um eine RDD zu haben, und ihr dann ein Schema zuweisen. Zwei gängige Methoden zum Erstellen eines Schemas sind entweder eine Fallklasse oder ein Schema-Objekt [mein bevorzugtes]. Befolgt die schnellen Codefragmente, die Sie verwenden können.
Fallklassenansatz
%Vor%Schema-Ansatz
%Vor%Der zweite Ansatz ist mein bevorzugter Ansatz, da die Fallklasse eine Beschränkung von maximal 22 Feldern hat und dies ein Problem darstellt, wenn Ihre Datei mehr als 22 Felder enthält!
Sie können es nicht in einen Datenrahmen konvertieren, bis Sie die implizite Konvertierung verwenden.
val sqlContext = neuer SqlContext (neuer SparkContext ())
importieren Sie sqlContext.implicits ._
Danach können Sie nur dies in Datenrahmen
umwandelnFallklasse Test (id: String, filed2: String)
val myFile = sc.textFile ("Datei.txt")
val df = MeineDatei.map (x = & gt; x.split (";")) .map (x = & gt; Test (x (0), x (1))) .toDF ()
Tags und Links scala apache-spark spark-dataframe rdd