Saya berasal dari latar belakang panda dan terbiasa membaca data dari file CSV ke dalam kerangka data dan kemudian hanya mengubah nama kolom menjadi sesuatu yang berguna menggunakan perintah sederhana:
df.columns = new_column_name_list
Namun, hal yang sama tidak berfungsi di pyspark dataframe yang dibuat menggunakan sqlContext. Satu-satunya solusi yang saya bisa lakukan dengan mudah adalah sebagai berikut:
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)
Ini pada dasarnya mendefinisikan variabel dua kali dan menyimpulkan skema pertama kemudian mengganti nama nama kolom dan kemudian memuat dataframe lagi dengan skema yang diperbarui.
Apakah ada cara yang lebih baik dan lebih efisien untuk melakukan ini seperti yang kita lakukan di panda?
Versi percikan saya adalah 1.5.0
sumber
for
loop +withColumnRenamed
, tetapireduce
pilihan Anda sangat bagus :)from functools import reduce
Keuntungan menggunakan cara ini: Dengan daftar kolom yang panjang, Anda hanya ingin mengubah sedikit nama kolom. Ini bisa sangat nyaman dalam skenario ini. Sangat berguna saat bergabung dengan tabel dengan nama kolom duplikat.
sumber
Jika Anda ingin mengubah semua nama kolom, coba
df.toDF(*cols)
sumber
df = df.toDF(*my_pandas_df.columns)
cols
menjadi nama kolom yang baru, dan hanya mengasumsikan urutan namacols
sesuai dengan urutan kolom dari dataframe?Jika Anda ingin menerapkan transformasi sederhana pada semua nama kolom, kode ini melakukan trik: (Saya mengganti semua spasi dengan garis bawah)
Terima kasih kepada @ user8117731 untuk
toDf
triknya.sumber
Jika Anda ingin mengganti nama satu kolom dan simpan sisanya seperti apa adanya:
sumber
df.withColumnRenamed('age', 'age2')
sumber
withColumnRenamed
.inilah pendekatan yang saya gunakan:
buat sesi pyspark:
buat dataframe:
lihat df dengan nama kolom:
buat daftar dengan nama kolom baru:
ubah nama kolom df:
lihat df dengan nama kolom baru:
sumber
Saya membuat fungsi yang mudah digunakan untuk mengganti nama beberapa kolom untuk pyspark dataframe, kalau-kalau ada yang ingin menggunakannya:
sumber
old_columns
akan sama dengandf.columns
.Cara lain untuk mengganti nama hanya satu kolom (menggunakan
import pyspark.sql.functions as F
):sumber
Saya menggunakan ini:
sumber
Anda dapat menggunakan fungsi berikut untuk mengubah nama semua kolom bingkai data Anda.
Jika Anda hanya perlu memperbarui beberapa nama kolom, Anda dapat menggunakan nama kolom yang sama di daftar replace_with
Untuk mengganti nama semua kolom
Untuk mengganti nama beberapa kolom
sumber
Untuk penggantian nama kolom tunggal, Anda masih dapat menggunakan toDF (). Sebagai contoh,
sumber
Kita dapat menggunakan berbagai pendekatan untuk mengganti nama nama kolom.
Pertama, mari kita buat DataFrame sederhana.
Sekarang mari kita coba ganti nama col_1 menjadi col_3. PFB beberapa pendekatan untuk melakukan hal yang sama.
Ini outputnya.
Saya harap ini membantu.
sumber