Erstellen eines Datenrahmens aus einer Textdatei in Spark

8

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?

    
Rahul 21.04.2016, 10:06
quelle

7 Antworten

8

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%     
Tzach Zohar 21.04.2016, 10:29
quelle
3

Wenn Sie die Methode toDF verwenden möchten, müssen Sie Ihre RDD von Array[String] in eine RDD einer Fallklasse konvertieren. Zum Beispiel müssen Sie tun:

%Vor%     
mgaido 21.04.2016 10:29
quelle
3

Ich habe verschiedene Möglichkeiten zum Erstellen von Dataframe aus Textdatei

angegeben %Vor%

Rohtextdatei

%Vor%

Spark-Sitzung ohne Schema

%Vor%

funken Sitzung mit Schema

%Vor%

mit dem SQL-Kontext

%Vor%     
Vikas Singh 06.10.2017 05:31
quelle
0

Ich weiß, dass ich ziemlich spät bin, um das zu beantworten, aber ich habe eine andere Antwort gefunden:

%Vor%     
Shelly Verma 24.08.2017 09:49
quelle
0
%Vor% %Vor%     
Vishal 25.04.2017 11:16
quelle
0

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!

    
user9406937 24.02.2018 20:28
quelle
0

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

umwandeln

Fallklasse 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 ()

    
Abhijit 21.03.2018 16:28
quelle