2016-09-29 18 views
6

Tôi có một dataframe với tên cột cấu hình ví dụLàm thế nào để đổi tên tên cột trong spark SQL

Journey channelA channelB channelC 
j1  1  0  0 
j1  0  1  0 
j1  1  0  0 
j2  0  0  1 
j2  0  1  0 

Bằng cách cấu hình tôi có nghĩa là có thể có 'n' kênh trong dataframe.

Bây giờ tôi cần một sự thay đổi trong đó tôi cần phải tìm tổng của tất cả các kênh truyền hình giống như

df.groupBy("Journey").agg(sum("channelA"), sum("channelB"), sum("channelC")) 

Kết quả trong số đó sẽ là:

Journey sum(channelA) sum(channelB) sum(channelC) 
j1  2    1    0 
j2  0    1    1 

Bây giờ tôi muốn đổi tên tên cột cho tên gốc và tôi có thể làm điều đó với

.withColumnRenamed("sum(channelA)", channelA) 

nhưng như tôi đã đề cập đến kênh danh sách là cấu hình và tôi muốn một tuyên bố cột đổi tên chung để đổi tên tất cả các cột tóm tắt của tôi để các tên cột gốc để có được một dataframe dự kiến ​​như sau:

Journey channelA channelB channelC 
j1  2  1    0 
j2  0  1    1 

gợi ý Bất kỳ cách tiếp cận này

Trả lời

15

Để đổi tên dinamically các cột DataFrame của bạn, bạn có thể sử dụng phương thức toDF (scala.collection.Seq colNames), với whitch bạn có thể điền thực tế colNames với tên cột ban đầu.

Vì vậy, bạn có thể cư dinamically một chuỗi như thế này:

val columnsRenamed = Seq("Journey", "channelA", "channelB","channelC") 

và sau đó gọi phương thức toDF:

df = df.toDF(columnsRenamed: _*) 

Lý do của : _* điều hành là để đúc hình thức Seq[String]-String*.

0

Nó cũng có thể được đổi tên theo các cách sau, Giả sử df đầu vào là của đầu vào biểu mẫuDf: DataFrame có cột _1, _2.

val newDf = inputDf.selectExpr("_1 as x1", "_2 as X2") 
* as -> maps to alias 

câu trả lời chi tiết khác có thể được tìm thấy ở đây: Renaming Column names of a Data frame in spark scala

Các vấn đề liên quan