繁体   English   中英

来自 RDD 的 updateStateByKey

[英]updateStateByKey from RDD

我对 Spark-graphx 有点陌生,所以如果这是一个愚蠢的问题,请原谅。 如果可能的话,我也更愿意在 Java 而不是 Scala 中执行此操作。

我需要对 JavaDStream 的 RDD 运行 graphx 计算,但我需要将结果回滚到我的 state object。

  • 我正在 foreachRDD 内部进行 graphx 计算,因为我不知道从 JavaDStream 获取 RDD 的另一种方法;
  • updateStateByKey 仅适用于 JavaDStream;
  • 每个图顶点 1-1 映射到每个 state object,所以如果有办法访问 foreachRDD 内部的 state object,那么这将解决它。 但是只是在顶点内部传递对 object 的引用并在其中调用更新 function 让我觉得这是不好的做法,但我可能是错的?

在 Java 你会如何解决这个问题? 如果有更好的方法,我准备将计算重组为不同的逻辑流程。

为了使它更直观,结构如下所示:

JavaDStream<StateObject> stream = inputDataStream.updateStateByKey(function);

stream.foreachRDD(rdd -> {
  Graph<Vertex, EdgeProperty> graph = GraphImpl.apply(/* derive the Vertex and EdgeProperty from the rdd */);
  JavaRDD<Vertex> updatedVertices = graphOperation(graph);
  // How to put the contents of updatedVertices back into stream?
});

我把我的图形计算作为一个转换,并在折叠期间(在 Pregel 中)启动并运行到挂起点,并且在运行 JavaConverters.asScalaIteratorConverter 时出现 Scala 错误,没有合适的迭代器......

简而言之,在网上阅读到 Graphframes 对于 Java 可能比 graphx 更稳定,因为将 Scala 包装在 Dataframes 的 Java 上下文中显然更容易,我放弃了这种方法并转向 Graphframes。 对于遇到类似问题的其他人,我很抱歉我没有提供解决方案,但我发现 Dataframe 方法必须更适合我的算法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM