복붙노트

[HADOOP] 불꽃 폭발 구조체

HADOOP

불꽃 폭발 구조체

나는 다음과 같은 스키마 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를, 같은 모든 요소가 DataFrame의 열이 될 EVENTTIME하는 구조체를 폭발합니다. 나는 기능을 폭발하려하지만 구조체 유형에 배열하지에 작동합니다. 그것은 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)

해결법

  1. ==============================

    1.그것은 매우 간단합니다 :

    그것은 매우 간단합니다 :

    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)
    
  2. from https://stackoverflow.com/questions/47285871/exploded-struct-in-spark by cc-by-sa and MIT license