Vengo dallo sfondo di Panda e sono abituato a leggere i dati dai file CSV in un frame di dati e quindi semplicemente cambiare i nomi delle colonne in qualcosa di utile usando il semplice comando:
df.columns = new_column_name_list
Tuttavia, lo stesso non funziona nei frame di dati pyspark creati utilizzando sqlContext. L'unica soluzione che ho potuto capire per farlo facilmente è la seguente:
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)
Questo in sostanza sta definendo la variabile due volte e inferendo prima lo schema, quindi rinominando i nomi delle colonne e quindi caricando di nuovo il frame di dati con lo schema aggiornato.
C'è un modo migliore e più efficiente per farlo come facciamo nei panda?
La mia versione spark è 1.5.0
for
loop +withColumnRenamed
, ma la tuareduce
opzione è molto bella :)