我正在开发一个Twitter数据分析项目,使用Apache Spark with Java和Cassandra for NoSQL数据库。
在我正在工作的项目中,我希望维护一个链表的arraylist(将在构建的Arraylist和Linkedlist中使用Java),这对所有映射器节点都是通用的。我的意思是,如果一个映射器将一些数据写入arraylist,它应该反映到所有其他映射器节点。
我知道广播共享变量,但这是只读共享变量,我想要的是共享的可写数据帧,其中一个映射器的更改应该全部反映出来。
有关如何使用Java在apache中实现这一目标的任何建议都会有很大的帮助。
提前致谢
答案 0 :(得分:2)
简短而且很可能令人失望的答案是,鉴于Spark架构,这是不可能的。工作节点彼此之间没有通信,广播变量和累加器(只写变量)都不是真正的共享变量。您可以尝试不同的解决方法,例如使用外部服务或共享文件系统进行通信,但它会引入所有类型的问题,如幂等性或同步。
据我所知,最好的办法是在批次之间更新状态或使用StreamingContext.remember
等工具。