2016-11-17 4 views
0

Ich bin ein wenig neu in pyspark/bigdata, also könnte dies eine schlechte Idee sein, aber ich habe etwa eine Million einzelne CSV-Dateien jeweils mit einigen Metadaten verbunden. Ich möchte einen Pyspark-Datenrahmen mit Spalten für alle Metadatenfelder, aber auch mit einer Spalte, deren Einträge die (vollständigen) CSV-Dateien sind, die jedem Satz von Metadaten zugeordnet sind.Können Sie eine Spalte von Datenrahmen in pyspark haben?

Ich bin gerade nicht bei der Arbeit, aber ich erinnere mich fast an den genauen Code. Ich habe ein Spielzeug Beispiel etwas versucht, wie

outer_pandas_df = pd.DataFrame.from_dict({"A":[1,2,3],"B":[4,5,6]}) 

## A B 
## 0 1 4 
## 1 2 5 
## 2 3 6 

Und dann, wenn Sie

outer_schema = StructType([ 
    StructField("A", IntegerType(), True), 
    StructField("B", IntegerType(), True) 
]) 

outer_spark_df = sqlctx.createDataFrame(outer_pandas_df, schema=outer_schema) 

tun dann ist das Ergebnis ein Funke Datenrahmen, wie erwartet. Aber jetzt, wenn Sie tun

inner_pandas_df = pd.DataFrame.from_dict({"W":["X","Y","Z"]}) 
outer_pandas_df["C"] = [inner_pandas_df, inner_pandas_df, inner_pandas_df] 

Und machen das Schema wie

inner_schema = StructType([ 
    StructField("W", StringType(), True) 
]) 

outer_schema = StructType([ 
    StructField("A", IntegerType(), True), 
    StructField("B", IntegerType(), True), 
    StructField("W", ArrayType(inner_schema), True) 
]) 

dann dies fehlschlägt:

sqlctx.createDataFrame(outer_pandas_df, schema=outer_schema) 

mit einem Fehler im Zusammenhang mit arraytype nicht Pandas Datenrahmen zu akzeptieren. Ich habe nicht den genauen Fehler.

Was versuche ich zu tun?

Antwort

0

Spark unterstützt keine verschachtelten Datenrahmen. Warum soll eine Spalte, die die gesamte CSV enthält, ständig im Speicher gespeichert werden? Es scheint mir, dass Sie die Daten nicht erfolgreich in die anderen Spalten extrahieren können, wenn Sie das brauchen.

Verwandte Themen