如何解决Spark DataFrame多维数据集操作提供重复的行
我正在对具有接近一百万行的spark数据帧进行计数聚合的多维数据集操作。我正在使用4列进行此多维数据集操作。我注意到多维数据集操作后返回的数据帧具有重复的行。专门用于空组合。
我在输入DF中没有空值,因为在执行多维数据集操作之前,我已经用每列的默认值替换了所有空值。此外,我正在过滤多维数据集输出中所有3个分组列均为空的行,因为那代表总数,我已经知道了。
例如:
val dimensions = List("A","B","C","D")
val cube_df = input_df.cube(dimensions.head,dimensions.tail: _*)
.count()
.filter(!(col("A").isNull && col("B").isNull && col("C").isNull && col("D").isNull))
现在是否可以在多维数据集上进行如下显示:
cube_df
.filter(col("A").isNull && col("B").isNull && col("C").isNull && col("D") === "xyz")
.show(false)
+----+----+----+---------------+-----------+
|A |B |C |D |Count |
+----+----+----+---------------+-----------+
|null|null|null|xyz |10221 |
|null|null|null|xyz |232638 |
+----+----+----+---------------+-----------+
我在输出中看到两行,显然,根据input_df(在我的情况下为第二行),这些行中只有1代表正确的计数。
我还知道,多维数据集基本上按所有组合1 by 1进行分组,将任何组合中的非参与列保持为null,并继续对每个组合group by执行union_all操作。但这对我来说还是有点奇怪。
那为什么会这样呢?如果无法避免出现重复的组合输出,那么如何确定返回的组合中的哪个代表正确的输出?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。