2016-08-14 5 views
2

DataFrames를 사용하면 df.withColumnRename("oldName", "newName")을 사용하여 간단하게 열의 이름을 바꿀 수 있습니다. 데이터 세트에서는 모든 필드가 입력되고 이름 지어 졌기 때문에 가능하지 않습니다. 내가 생각할 수있는 주위에있는 유일한 작업은 데이터 집합에 map을 사용하는 것입니다데이터 집합 (Spark 2.0)의 열 이름을 효율적으로 바꾸는 방법

case class Orig(a: Int, b: Int) 
case class OrigRenamed(a: Int, bNewName: Int) 

val origDS = Seq(Orig(1,2), Orig(3,4)).toDS 
origDS.show 
+---+---+ 
| a| b| 
+---+---+ 
| 1| 2| 
| 3| 4| 
+---+---+ 

// To rename with map 
val origRenamedDS = origDS.map{ case Orig(x,y) => OrigRenamed(x,y) } 
origRenamed.show 
+---+--------+ 
| a|bNewName| 
+---+--------+ 
| 1|  2| 
| 3|  4| 
+---+--------+ 

이 그냥 열 이름을 바꿀 수있는 매우 라운드에 대한 비효율적 인 방법을 보인다. 더 좋은 방법이 있습니까?

origDS.toDF("a", "bNewName").as[OrigRenamed] 

그러나 실제로 이름 바꾸기에

단순히 의미가없는 정적 Dataset를 입력에 :

답변

0

약간 더 간결 솔루션은 다음과 같이 될 것이다. Dataframe (Dataset[Row])과 같은 기둥 형 표현을 사용하지만 의미는 완전히 다릅니다.

열의 이름은 저장된 개체의 특정 필드에 해당하므로 동적으로 이름을 바꿀 수있는 것이 아닙니다. 다시 말해 Datasets은 정적으로 입력되지 않고 DataFrames이지만 개체 컬렉션입니다.

+0

나는'Dataframe'으로 내려가는 것을 피하려고했고, 타입 안전'Dataset' 연산 만 사용하려고했습니다. 그러나 나는 당신의 요점을 안다, 고마워! – Janie

+0

괜찮지 만 데이터 집합을 매핑하면 그 결과가 Ints라고하는 데이터 집합입니다. 이제 Ints의 데이터 세트가 있고 열 이름이 "value"이지만 어쩌면 당신은 "myInt"라고 부르기를 원할 것입니다. –

관련 문제