Я надходжу з фону панд, і я звик читати дані з файлів CSV у кадр даних, а потім просто змінювати імена стовпців на щось корисне за допомогою простої команди:
df.columns = new_column_name_list
Однак те ж не працює у фреймах даних pyspark, створених за допомогою sqlContext. Єдине рішення, з якого я міг би зробити це легко, це наступне:
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)
Це в основному визначає змінну двічі і виводить схему спочатку, потім перейменуючи імена стовпців, а потім завантажуючи фрейм даних знову оновленою схемою.
Чи є кращий і ефективніший спосіб зробити це, як ми робимо в пандах?
Моя іскрова версія - 1.5.0
for
циклом +withColumnRenamed
, але вашreduce
варіант дуже приємний :)