pochodzę pandy tle i jestem przyzwyczajony do odczytu danych z plików CSV do dataframe a potem po prostu zmienić nazwy kolumn na coś użytecznego przy użyciu prostego polecenia:Jak zmienić nazwy kolumn danych w pyspark?
df.columns = new_column_name_list
Jednak samo nie działa w ramki danych pyspark utworzone za pomocą sqlContext. Jedynym rozwiązaniem mogłem zorientować się, aby to zrobić łatwo jest następujący:
df = sqlContext.read.format("com.databricks.spark.csv").options(header='false', inferschema='true', delimiter='\t').load("data.txt")
oldSchema = df.schema
for i,k in enumerate(oldSchema.fields):
k.name = new_column_name_list[i]
df = sqlContext.read.format("com.databricks.spark.csv").options(header='false', delimiter='\t').load("data.txt", schema=oldSchema)
To jest w zasadzie definiowania zmiennej dwukrotnie i wywodząc schematu pierwszy wtedy zmiana nazwy nazwy kolumn, a następnie ładowanie dataframe dzięki zaktualizowanej schematu .
Czy istnieje lepszy i skuteczniejszy sposób na zrobienie tego, tak jak robimy to w pandach?
Moja wersja jest iskra 1.5.0
Zrobiłem go z 'for' pętli +' withColumnRenamed', ale twój 'opcja reduce' jest bardzo ładne :) –
@FelipeGerard że to bardzo zły pomysł. –
Cóż, ponieważ nic nie zostanie zrobione w Sparku, dopóki akcja nie zostanie wywołana w DF, jest to po prostu mniej elegancki kod ... Ostatecznie wynikowy DF jest dokładnie taki sam! –