Pochodzę z tła pand i jestem przyzwyczajony do czytania danych z plików CSV do ramki danych, a następnie po prostu zmieniając nazwy kolumn na coś użytecznego za pomocą prostego polecenia:
df.columns = new_column_name_list
Jednak to samo nie działa w ramkach danych pyspark utworzonych za pomocą sqlContext. Jedynym rozwiązaniem, które udało mi się wymyślić, aby to zrobić z łatwością, jest:
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)
Jest to w zasadzie dwukrotne zdefiniowanie zmiennej i najpierw wywnioskowanie schematu, a następnie zmiana nazw kolumn, a następnie ponowne załadowanie ramki danych zaktualizowanym schematem.
Czy istnieje lepszy i bardziej wydajny sposób na zrobienie tego tak, jak robimy to w pandach?
Moja wersja Spark to 1.5.0
for
pętlą +withColumnRenamed
, ale twojareduce
opcja jest bardzo fajna :)