2016-04-13 3 views
5

Ich lese einen Datensatz wie folgt.Wie Zuweisen und Verwenden von Spaltenüberschriften in Spark?

Meine Datei enthält mehr als 50 Felder und ich möchte Spaltenüberschriften für jedes der Felder zuweisen, um später in meinem Skript zu referenzieren.

Wie mache ich das in PySpark? Ist DataFrame so weit weg?

PS - Neuling zu Spark.

+1

_Ist DataFrame hier? _ - Ja, ist es. Oder 'namedtuple', wenn Sie viel einfachen Python-Code verwenden möchten. – zero323

+0

DataFrame ist eine Kombination aus Schema und RDD. Gerade jetzt Variable "f" in Ihrem Code ist eine RDD. Wenn Sie also ein Schema hinzufügen, erhalten Sie DataFrame. Dann wird es Kopf- und Spaltennamen haben. Stellen Sie außerdem fest, dass Sie diese Daten als Tabelle registrieren und SQL darüber ausführen können. –

Antwort

4

Hier ist, wie Spaltennamen hinzufügen Datenrahmen mit:

Angenommen Ihre csv hat das Trennzeichen ‚‘. Bereiten Sie die Daten wie folgt, bevor es zu Datenrahmen übertragen:

f = sc.textFile("s3://test/abc.csv") 
data_rdd = f.map(lambda line: [x for x in line.split(',')]) 

Angenommen, die Daten 3 Spalten:

data_rdd.take(1) 
[[u'1.2', u'red', u'55.6']] 

Jetzt können Sie die Spaltennamen angeben, wenn diese RDD zu Datenrahmen übertragen toDF() mit:

df_withcol = data_rdd.toDF(['height','color','width']) 

df_withcol.printSchema() 

    root 
    |-- height: string (nullable = true) 
    |-- color: string (nullable = true) 
    |-- width: string (nullable = true) 

Wenn Sie keine Spaltennamen angeben, erhalten Sie einen Datenrahmen mit Standardspaltennamen ‚_1‘, ‚_2‘, ...:

df_default = data_rdd.toDF() 

df_default.printSchema() 

    root 
    |-- _1: string (nullable = true) 
    |-- _2: string (nullable = true) 
    |-- _3: string (nullable = true) 
2

Die Lösung für diese Frage hängt wirklich von der Version von Spark ab, die Sie ausführen. Wenn Sie Spark 2.0+ verwenden, können Sie die CSV-Datei als Dataframe einlesen und Spalten mit toDF hinzufügen, was zum Umwandeln einer RDD in einen DataFrame oder zum Hinzufügen von Spalten zu einem vorhandenen Datenframe geeignet ist.

filename = "/path/to/file.csv" 
df = spark.read.csv(filename).toDF("col1","col2","col3")