首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Pyspark中将带有空值的列值扩展/分解为多行

在Pyspark中将带有空值的列值扩展/分解为多行
EN

Stack Overflow用户
提问于 2021-10-20 07:49:12
回答 1查看 53关注 0票数 1

我有以下数据:

我想对这些数据进行扩展,以获得以下数据:

我已经尝试了以下代码:

代码语言:javascript
复制
df = (df
  .selectExpr("id", 
              "split(col1, ',') col1", 
              "split(col2, ',') col2",
              "split(col3, ',') col3")
  .withColumn("arr", F.expr("arrays_zip(col1, col2, col3)"))
  .selectExpr("id", "inline(arr)"))
  df.show()

此代码的结果为0行。所以我尝试使用命令'inline_outer':

代码语言:javascript
复制
    df = (df
  .selectExpr("id", 
              "split(col1, ',') col1", 
              "split(col2, ',') col2",
              "split(col3, ',') col3")
  .withColumn("arr", F.expr("arrays_zip(col1, col2, col3)"))
  .selectExpr("id", "inline_outer(arr)"))
  df.show()

这段代码返回所有行,但没有任何值。

在这个阶段,我很困惑为什么会发生这种情况,就好像我暴露了原始的列一样(例如,没有拆分的col1,等等)这些值就在那里。

欢迎提出任何建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-20 09:03:35

null值使用arrays_zip将返回null。对于您的情况,我们需要空数组而不是null。

代码语言:javascript
复制
cnd = "arrays_zip(coalesce(col1,array()),coalesce(col2,array()),coalesce(col3,array()))"

df = df.selectExpr("id","split(col1, ',') col1","split(col2, ',') col2","split(col3, ',') col3").\
withColumn("arr", F.expr(cnd)).selectExpr("id", "inline_outer(arr)")

df.show()

+---+----+----+----+
|id |0   |1   |2   |
+---+----+----+----+
|x  |1   |a   |c   |
|x  |2   |b   |c   |
|x  |3   |c   |c   |
|y  |null|null|null|
|z  |12  |null|c   |
|z  |3   |null|null|
+---+----+----+----+
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69642191

复制
相关文章

相似问题

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