2017-10-15 3 views
1

스파크 데이터 프레임의 모든 열 이름을 Seq 변수로 가져 오는 방법.스파크 데이터 프레임 열 목록 가져 오기

입력 데이터 & 스키마

val dataset1 = Seq(("66", "a", "4"), ("67", "a", "0"), ("70", "b", "4"), ("71", "d", "4")).toDF("KEY1", "KEY2", "ID") 

dataset1.printSchema() 
root 
|-- KEY1: string (nullable = true) 
|-- KEY2: string (nullable = true) 
|-- ID: string (nullable = true) 

내가 스칼라 프로그래밍을 사용하여 변수의 모든 열 이름을 저장해야합니다. 나는 아래와 같이 시도했지만, 작동하지 않는다.

val selectColumns = dataset1.schema.fields.toSeq 

selectColumns: Seq[org.apache.spark.sql.types.StructField] = WrappedArray(StructField(KEY1,StringType,true),StructField(KEY2,StringType,true),StructField(ID,StringType,true)) 

예상 출력 :

val selectColumns = Seq(
    col("KEY1"), 
    col("KEY2"), 
    col("ID") 
) 

selectColumns: Seq[org.apache.spark.sql.Column] = List(KEY1, KEY2, ID) 

답변

2

을 홍보 당신이 꼬리에 머리에서 시퀀스의 순서대로 나중에 모든 열을 선택하는 경우

val orderedDF = dataset1.select(cols.head, cols.tail:_ *) 
2

는 다음과 같은 명령을 사용할 수 있습니다 : 나는 열을 사용

val selectColumns = dataset1.columns.toSeq 

scala> val dataset1 = Seq(("66", "a", "4"), ("67", "a", "0"), ("70", "b", "4"), ("71", "d", "4")).toDF("KEY1", "KEY2", "ID") 
dataset1: org.apache.spark.sql.DataFrame = [KEY1: string, KEY2: string ... 1 more field] 

scala> val selectColumns = dataset1.columns.toSeq 
selectColumns: Seq[String] = WrappedArray(KEY1, KEY2, ID) 
+0

출력을 사용할 수 있도록

val cols = dataset1.columns.toSeq 

다음과 같은 operty 서열 [org.apache해야한다. spark.sql.Column] 대신 List [String]를 사용하십시오. – raam

+0

@raam - 출력/열 이름으로 무엇을 하시겠습니까? 왜 그것들은 Columns 타입이어야 하는가? – Yaron

+0

이 논리를 중간 result.so에 의해 구현하려면 열의 출력이 필요합니다. – raam

2
val selectColumns = dataset1.columns.toList.map(col(_)) 
관련 문제