【发布时间】:2015-08-21 01:42:06
【问题描述】:
所以我有一些表格数据:
node parent value
c1 p1 2
p1 3
c2 p1 1
c11 c1 1
c12 c1 1
其中有一棵树由节点和父列表示(父母可能有多少个孩子)并且每个孩子的值的总和 = 父母的值。 (我的意思是,这应该是正确的,但它可能不是,这就是我想要检查的)
我想做的事:
我想检查“每个孩子的价值之和 = 父母的价值”对于输入数据中给定的每个父母是否成立。
我在 Spark 中使用 Scala 来实现这个逻辑,所以我想在功能上做到这一点。
到目前为止我做了什么:
输入是一个 csv 文件,我从中创建了一个数据框,并执行以下操作给我,父 => 子列表,这是我知道我需要的信息。
tree = fileDataFrame.select(parent, node).map( x => (x(0), x(1)).groupByKey()
同样,我得到了节点 => 值,这又是有用的信息:
values = fileDataFrame.select(node, value).map( x => (x(0), x(1))
我不知道从这里去哪里。我想添加所有孩子的值(使用reduceByKey我猜)但我还没有设置,因为我有父=>孩子列表,我需要父母=>值列表孩子们。
我对函数式编程很陌生,所以我的大脑仍然在循环思考。
实施此检查的好方法是什么? Spark 允许以下转换 (http://spark.apache.org/docs/latest/programming-guide.html#transformations)
提前致谢,欢迎提出任何建议!
【问题讨论】:
-
由于您的数据本质上是一个层次结构,您可以使用 GraphX spark 库将其作为图形问题来解决。
标签: scala functional-programming apache-spark