【问题标题】:Exploded Struct in SparkSpark中的爆炸结构
【发布时间】:2018-04-27 09:45:50
【问题描述】:

我有以下架构的 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、customerId、eventTime 等所有元素成为 DataFrame 中的列。我尝试了explode 函数,但它适用于Array 而不是struct 类型。是否可以将能够的数据框转换为以下数据框:

     |-- 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)

【问题讨论】:

    标签: hadoop apache-spark apache-spark-sql


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 2017-01-09
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      相关资源
      最近更新 更多