2017-06-07 7 views
0

Was ist die Einschränkung für pyspark Dataframe Spaltennamen. Ich habe Problem mit folgendem Code ..pyspark dataframe Spaltenname

%livy.pyspark 
df_context_spark.agg({'spatialElementLabel.value': 'count'}) 

Es gibt ...

u'Cannot resolve column name "spatialElementLabel.value" among (lightFixtureID.value, spatialElementLabel.value);' 

Der Spaltenname offenbar korrekt eingegeben wird. Ich habe den Datenrahmen durch Transformation von Pandas Dataframe bekommen. Gibt es da ein Problem mit Punkt in der Spaltennamen-Zeichenfolge?

Antwort

1

Punkte werden für verschachtelte Felder innerhalb eines Strukturtyps verwendet. Also, wenn Sie hatten eine Spalte, die „Adresse“ des Typs StructType genannt wurde, und im Inneren, dass Sie hatte Street1, STREET2, etc. Sie würde es greifen die einzelnen Felder wie folgt aus:

df.select("address.street1", "address.street2", ..) 

Diesem Grund, wenn Sie wollen Um einen Punkt in Ihrem Feldnamen zu verwenden, müssen Sie das Feld angeben, wenn Sie darauf verweisen. Zum Beispiel:

from pyspark.sql.types import * 

schema = StructType([StructField("my.field", StringType())]) 

rdd = sc.parallelize([('hello',), ('world',)]) 
df = sqlContext.createDataFrame(rdd, schema) 

# Using backticks to quote the field name 
df.select("`my.field`").show() 
+0

Vielen Dank! Schließlich entschied ich, Spalten umzubenennen und Punkte in den Spaltennamen loszuwerden. Ich kann nur bestätigen, dass dein Vorschlag mit Backticks sehr gut funktioniert. –

Verwandte Themen