Я пришел из пандского фона и привык читать данные из 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
вариант очень хорош :)