首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在pyspark中对数据集进行拆包

在pyspark中对数据集进行拆包
EN

Stack Overflow用户
提问于 2017-08-18 22:21:21
回答 1查看 46关注 0票数 0

我有一个数据集,看起来像这样。

代码语言:javascript
复制
(34521658, 0001-01-01, 2500-01-01, 2 , A, Y, 15, P, A, 4776, 4776, 4776, {(11, P, A, 4776,4766, 4776), (12, P, A, 4776,4766, 4776), (13, P, A, 4776,4766, 4776)})

现在我想把它拆开让它看起来像

代码语言:javascript
复制
(34521658, 0001-01-01, 2500-01-01, 2 , A, Y, 15, P, A, 4776, 4776, 4776, 11, P, A, 4776,4766, 4776)    
(34521658, 0001-01-01, 2500-01-01, 2 , A, Y, 15, P, A, 4776, 4776, 4776, 12, P, A, 4776,4766, 4776)
(34521658, 0001-01-01, 2500-01-01, 2 , A, Y, 15, P, A, 4776, 4776, 4776, 13, P, A, 4776,4766, 4776)

如何在pyspark中做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-19 00:19:12

按照注释中的建议,可以使用flatMap或explode。以下是如何使用explode sql函数(explode,顾名思义,它会将数组或映射列扩展为更多行)为了简化方法,我将只保留有意义的列。假设第一列是一个id,而要分解的列的名称为bag,则初始数据集的外观如下所示

代码语言:javascript
复制
+--------+--------------------+
|      id|                 bag|
+--------+--------------------+
|34521658|[[11,P,A,4776,476...|
+--------+--------------------+

数据集的架构为:

代码语言:javascript
复制
scala> df.printSchema
root
 |-- id: integer (nullable = true)
 |-- bag: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- _1: integer (nullable = true)
 |    |    |-- _2: string (nullable = true)
 |    |    |-- _3: string (nullable = true)
 |    |    |-- _4: integer (nullable = true)
 |    |    |-- _5: integer (nullable = true)
 |    |    |-- _6: integer (nullable = true)

请注意,bag列是一个元素数组。在这个柱子上,我们可以像这样应用分解函数:

代码语言:javascript
复制
df.withColumn("bag", explode($"bag"))

生成的数据集/数据帧为:

代码语言:javascript
复制
+--------+--------------------+
|      id|                 bag|
+--------+--------------------+
|34521658|[11,P,A,4776,4766...|
|34521658|[12,P,A,4776,4766...|
|34521658|[13,P,A,4776,4766...|
+--------+--------------------+

希望能有所帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45758959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档