首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spark-dataframe透视缺少列/值

spark-dataframe透视缺少列/值
EN

Stack Overflow用户
提问于 2018-08-31 17:51:06
回答 1查看 1.5K关注 0票数 2

现在我面临着一个我无法解决的问题,让我来解释一下。

我需要透视一个spark-dataframe,但在某些情况下,透视没有记录来包含我需要的列。下面是一个示例:

假设有4种类型的事件: A、B、C、D

我收到如下所示的事件日志文件:

代码语言:javascript
复制
|Id|year|type|
|--|----|----|
|a |2015|   A|
|a |2016|   A|
|a |2015|   A|
|a |2017|   A|
|b |2015|   A|
|b |2015|   B|
|b |2016|   D|
|b |2015|   B|
|b |2017|   A|  

当我做轴心时,我得到:

代码语言:javascript
复制
|id|year|   A|   B|   D|
|--|----|----|----|----|
|a |2015|   2|null|null|
|a |2016|   1|null|null|
|a |2017|   1|null|null|
|b |2015|   1|   2|null|
|b |2016|   1|null|   1|
|b |2017|   1|null|null|

我真正需要的是:

代码语言:javascript
复制
|id|year|   A|   B|   C|   D|
|--|----|----|----|----|----|
|a |2015|   2|   0|   0|   0|
|a |2016|   1|   0|   0|   0|
|a |2017|   1|   0|   0|   0|
|b |2015|   1|   2|   0|   0|
|b |2016|   1|   0|   0|   1|
|b |2017|   1|   0|   0|   0|

想象一下,在我收到的每个事件日志文件中都缺少不同类型的事件,但我始终需要拥有所有事件类型(A、B、C和D)的列。

我希望我已经解释得很清楚了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-31 23:43:00

代码语言:javascript
复制
val lscol = Seq((“A”),(“B”),(“C”),(“D”)).toDF(“Type”)

//df is the initial dataframe prior to pivot
df.join(lscol,df.col(“Type”)===lscol.col(“Type”),”right”)
    .drop(df(“Type”))
    .groupBy(“ID”,”year”)
    .pivot(“Type”)
    .agg(count(“Type”))
    .filter(!col(“ID”).isNull && !col(“year”).isNull)
    .na
    .fill(0)
    .show
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52112830

复制
相关文章

相似问题

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