加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Spark:分解结构的数据帧数组并附加id

发布时间:2020-12-16 18:42:03 所属栏目:安全 来源:网络整理
导读:我目前有一个带有id和列的数据帧,这是一个结构数组: root |-- id: integer (nullable = true) |-- lists: array (nullable = true) | |-- element: struct (containsNull = true) | | |-- text: string (nullable = true) | | |-- amount: double (nullable
我目前有一个带有id和列的数据帧,这是一个结构数组:

root
 |-- id: integer (nullable = true)
 |-- lists: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- text: string (nullable = true)
 |    |    |-- amount: double (nullable = true)

这是一个包含数据的示例表:

id | lists
 -----------
 1  | [[a,1.0],[b,2.0]]
 2  | [[c,3.0]]

如何将上述数据帧转换为下面的数据帧?我需要“爆炸”数组并同时附加id.

id | col1  | col2
 -----------------
 1  | a     | 1.0
 1  | b     | 2.0
 2  | c     | 3.0

编辑说明:

请注意,以下两个示例之间存在差异.第一个包含“一系列元素结构”.而后者只包含“一系列元素”.

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)

解决方法

爆炸正是这个功能:

import org.apache.spark.sql.functions._

df.select($"id",explode($"lists")).select($"id",$"col.text",$"col.amount")

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读