apache-spark - Spark dataframe 多维数据集操作给出重复的行
问题描述
我正在对具有接近 100 万行的 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 |
+----+----+----+---------------+-----------+
我在输出中看到两行,显然这些行中只有 1 行表示根据 input_df 的正确计数(在我的例子中是第二行)。
我也知道,多维数据集基本上对所有组合 1 比 1 进行分组,将任何组合中的非参与列保持为空,并继续为每个组合分组执行 union_all 操作。但这对我来说仍然有点奇怪。
那么为什么会这样呢?如果我不能避免这种重复的组合输出,那么我如何识别返回的组合中的哪个代表正确的输出?
解决方案
推荐阅读
- java - 如何在 NetBeans 上运行项目时删除“set build.dir”错误
- sql-server - 使用其他表中的值在表上创建主键
- unity3d - 在 Oculus 上突出显示触摸控制器按钮以进行教程
- mysql - MySQL 与 PostgreSQL 重复
- socket.io - Cloud Firestore - 两个播放器 - 检测断开连接 [Flutter]
- spring - 如何在多个假装客户端之一中禁用 hystrix
- java - 创建名为“userController”的 bean 时出错:通过字段“userService”表达的不满足的依赖关系
- python - 读取文件时的Python UnicodeEncodeError
- node.js - Websocket 431 错误:意外的服务器响应
- python - Pygame 参数 2 必须是 pygame.surface 而不是 str