【发布时间】:2020-10-09 20:28:51
【问题描述】:
我使用具有树结构的数据。每个父母可以有多个孩子。父母没有关于孩子的信息,但每个孩子都知道它的父母。此外,每个孩子都知道它的完整路径——这是一串串联的父标识符,因此每条记录都知道它在树中的级别。这条记录有一个结构:
id | parent_id | path
--- + --------- + ------
11 | 1 | 1-11
12 | 1 | 1-12
121 | 12 | 1-12-121
现在我必须阅读表格,按 id 分组并对 bigint 类型的列 value 求和。最重要的事实是只有叶子 - 没有子元素的元素 - 具有指定的值,并且每个父元素必须是其所有子元素值的总和。最初,所有父母的值都等于 0。
分组前:
Root
| - Parent 1 (value = 0)
| - - Child 11 (value = 1)
| - - Child 12 (value = 1)
| - - Parent 13 (value = 0)
| - - - Child 131 (value = 2)
| - - - Child 132 (value = 1)
| - Parent 2 (value = 0)
| - - Child 21 (value = 2)
| - - Child 22 (value = 1)
分组结果:
Root
| - Parent 1 (value = 5 (1 + 1 + 3))
| - - Child 11 (value = 1)
| - - Child 12 (value = 1)
| - - Parent 13 (value = 3 (2 + 1))
| - - - Child 131 (value = 2)
| - - - Child 132 (value = 1)
| - Parent 2 (value = 3 (2 + 1))
| - - Child 21 (value = 2)
| - - Child 22 (value = 1)
非常重要的要求:我无法在内存中收集这些数据和分组,因为数据集非常庞大,因此我必须使用数据集或数据框来完成。
【问题讨论】:
-
您的表中是否有 id 1、id 2 作为记录?如果是这样,它的父 ID 和路径是什么?
标签: dataframe apache-spark dataset aggregation