2017-11-14 2 views
1

에서 구조체를 분해 :내가 다음 스키마와 DataFrame이 불꽃

|-- data: struct (nullable = true) 
| |-- asin: string (nullable = true) 
| |-- customerId: long (nullable = true) 
| |-- eventTime: long (nullable = true) 
| |-- marketplaceId: long (nullable = true) 
| |-- rating: long (nullable = true) 
| |-- region: string (nullable = true) 
| |-- type: string (nullable = true) 
|-- uploadedDate: long (nullable = true) 

내가 구조체를 폭발 할 ASIN, 고객 ID를, EVENTTIME 같은 모든 요소가 DataFrame의 열을가하도록. 난 폭발 기능을 시도하지만 그것은 구조체 형식에 배열에 작동합니다. 그것은 가능한 dataframe 아래로 수 데이터 프레임을 변환하는 것입니다 :

 |-- asin: string (nullable = true) 
    |-- customerId: long (nullable = true) 
    |-- eventTime: long (nullable = true) 
    |-- marketplaceId: long (nullable = true) 
    |-- rating: long (nullable = true) 
    |-- region: string (nullable = true) 
    |-- type: string (nullable = true) 
    |-- uploadedDate: long (nullable = true) 

답변

2

그것은 아주 간단합니다

val newDF = df.select("uploadedDate", "data.*"); 

당신은 uploadedDate 및 필드 데이터의 모든 하위 요소를 선택 말할

예 :

scala> case class A(a: Int, b: Double) 
scala> val df = Seq((A(1, 1.0), "1"), (A(2, 2.0), "2")).toDF("data", "uploadedDate") 
scala> val newDF = df.select("uploadedDate", "data.*") 
scala> newDF.show() 
+------------+---+---+ 
|uploadedDate| a| b| 
+------------+---+---+ 
|   1| 1|1.0| 
|   2| 2|2.0| 
+------------+---+---+ 

scala> newDF.printSchema() 
root 
|-- uploadedDate: string (nullable = true) 
|-- a: integer (nullable = true) 
|-- b: double (nullable = true) 
+0

고마워요! 그것은 효과가 있었다. – Ajay

관련 문제