Ste*_*eve 8 scala apache-spark spark-dataframe
我目前有一个带有id和列的数据帧,这是一个结构数组:
root
|-- id: integer (nullable = true)
|-- lists: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- text: string (nullable = true)
| | |-- amount: double (nullable = true)
Run Code Online (Sandbox Code Playgroud)
这是一个包含数据的示例表:
id | lists
-----------
1 | [[a, 1.0], [b, 2.0]]
2 | [[c, 3.0]]
Run Code Online (Sandbox Code Playgroud)
如何将上述数据帧转换为下面的数据帧?我需要"爆炸"数组并同时附加id.
id | col1 | col2
-----------------
1 | a | 1.0
1 | b | 2.0
2 | c | 3.0
Run Code Online (Sandbox Code Playgroud)
编辑说明:
请注意,以下两个示例之间存在差异.第一个包含"一系列元素结构".而后者只包含"一系列元素".
root
|-- id: integer (nullable = true)
|-- lists: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- text: string (nullable = true)
| | |-- amount: double (nullable = true)
root
|-- a: long (nullable = true)
|-- b: array (nullable = true)
| |-- element: long (containsNull = true)
Run Code Online (Sandbox Code Playgroud)
小智 17
explode 正是这个功能:
import org.apache.spark.sql.functions._
df.select($"id", explode($"lists")).select($"id", $"col.text", $"col.amount")
Run Code Online (Sandbox Code Playgroud)