首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按分隔符拆分列数据

按分隔符拆分列数据
EN

Stack Overflow用户
提问于 2018-05-15 19:27:09
回答 1查看 484关注 0票数 -4

我有一个Spark (1.4) dataframe,其中列中的数据类似于"1-2-3-4-5-6-7-8-9-10-11-12“。我想将数据拆分为多个列。请注意,字段的数量可以从1到12个不同,这是不固定的。另外,我们使用的是Scala API。

编辑:

对原始问题进行编辑。我有如下分隔字符串:

代码语言:javascript
复制
"ABC-DEF-PQR-XYZ"

根据这个字符串,我需要在单独的列中创建分隔字符串,如下所示。请注意,此字符串位于DF中的列中。

代码语言:javascript
复制
Original column: ABC-DEF-PQR-XYZ
New col1 : ABC
New col2 : ABC-DEF
New col3 : ABC-DEF-PQR
New col4 : ABC-DEF-PQR-XYZ

请注意,可能有12个这样的新列需要从原始字段派生。此外,原始列中的字符串可能会发生变化,例如,有时是1列,有时是2,但max可以是12。希望我已经清楚地表达了问题的陈述。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-05-15 20:52:47

您可以使用explodepivot。以下是一些示例数据:

代码语言:javascript
复制
df=sc.parallelize([["1-2-3-4-5-6-7-8-9-10-11-12"], ["1-2-3-4"], ["1-2-3-4-5-6-7-8-9-10"]]).toDF(schema=["col"])

现在为行添加一个唯一的id,这样我们就可以跟踪数据属于哪一行:

代码语言:javascript
复制
df=df.withColumn("id", f.monotonically_increasing_id())

然后通过分隔符-拆分列,然后拆分得到一个长格式数据集:

代码语言:javascript
复制
df=df.withColumn("col_split", f.explode(f.split("col", "\-")))

最后,将重点放在id上,以获得更广泛的形式:

代码语言:javascript
复制
df.groupby("id")
  .pivot("col_split")
  .agg(f.max("col_split"))
  .drop("id").show()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50349036

复制
相关文章

相似问题

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