Tôi đến từ nền gấu trúc và quen đọc dữ liệu từ các tệp CSV thành một khung dữ liệu và sau đó chỉ cần thay đổi tên cột thành một cái gì đó hữu ích bằng cách sử dụng lệnh đơn giản:
df.columns = new_column_name_list
Tuy nhiên, điều tương tự không hoạt động trong các tệp dữ liệu pyspark được tạo bằng sqlContext. Giải pháp duy nhất tôi có thể tìm ra để làm điều này một cách dễ dàng là như sau:
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)
Điều này về cơ bản là xác định biến hai lần và suy ra lược đồ trước sau đó đổi tên các tên cột và sau đó tải lại khung dữ liệu với lược đồ được cập nhật.
Có cách nào tốt hơn và hiệu quả hơn để làm điều này giống như chúng ta làm trong gấu trúc không?
Phiên bản tia lửa của tôi là 1.5.0
for
vòng lặp +withColumnRenamed
, nhưngreduce
tùy chọn của bạn rất hay :)