Apache spark ApacheSpark:如何处理分层数据

Apache spark ApacheSpark:如何处理分层数据,apache-spark,Apache Spark,我是个新手。我想知道spark是否可以像处理树一样处理层次数据。(不使用graphx) 假设我有一棵树用平面文件表示 关键值 A1 P1 A1 P2 P1 S1 P1 S2 P1 S3 P2 S4 S1 C1 S1 C2 是否有办法强制火花按以下顺序减少: S1(C1+C2) P1(S1+S2+S3)和P2(S4) 一旦P1和P2减小 A1(P1+P2) 如果我使用“reduceByKey”,则顺序是随机的。 感谢您提供的任何提示您可以自己编写代码来完成此操作,但恐怕您无法通过API完成

我是个新手。我想知道spark是否可以像处理树一样处理层次数据。(不使用graphx) 假设我有一棵树用平面文件表示

  • 关键值
  • A1 P1
  • A1 P2
  • P1 S1
  • P1 S2
  • P1 S3
  • P2 S4
  • S1 C1
  • S1 C2
是否有办法强制火花按以下顺序减少:

  • S1(C1+C2)
  • P1(S1+S2+S3)和P2(S4)
  • 一旦P1和P2减小
  • A1(P1+P2)
如果我使用“reduceByKey”,则顺序是随机的。
感谢您提供的任何提示

您可以自己编写代码来完成此操作,但恐怕您无法通过API完成此操作。根据用例和图形的特征(例如,大量的边、密集的计算、大量的节点/数据),实现方法会有所不同

假设节点数量较少,一种方法是逐级处理图。为此,需要将图形层次结构信息提取到广播变量,并应用一组联合和过滤器,直到计算出顶级节点

正如@zero323所说,如果您是Spark新手,这可能有点棘手,但在我的用例中,它可以完美地聚合+80000个节点和100s GBs的底层数据


思考这个问题的方法是,每次调用Spark都会聚合一个图形级别。因此,如果图形的深度很高或有数十亿个节点,这种方法将不起作用。

请提供您尝试过的reduceByKey方法!谢谢我发现处理大型树(数百万个节点)时会很棘手