Aja*_*jay 3 hadoop apache-spark apache-spark-sql
我有具有以下架构的 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)
Run Code Online (Sandbox Code Playgroud)
我想分解结构,使 asin、customerId、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)
Run Code Online (Sandbox Code Playgroud)
这很简单:
val newDF = df.select("uploadedDate", "data.*");
Run Code Online (Sandbox Code Playgroud)
您告诉选择 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5464 次 |
| 最近记录: |