Apache spark 如何在2个Spark上下文之间共享Spark RDD?

Apache spark 如何在2个Spark上下文之间共享Spark RDD?,apache-spark,rdd,Apache Spark,Rdd,我有一个RMI集群。每个RMI服务器都有一个Spark上下文。 有没有办法在不同的Spark上下文之间共享RDD?没有,RDD绑定到单个SparkContext。一般的想法是,你有一个Spark集群和一个驱动程序,告诉集群该做什么。此驱动程序将在RDD上执行SparkContext和启动操作 如果您只想将RDD从一个驱动程序移动到另一个驱动程序,解决方案是将其写入第一个驱动程序中的磁盘(S3/HDFS/…),然后从另一个驱动程序中的磁盘加载。正如Daniel Darabos所述,这是不可能的。S

我有一个RMI集群。每个RMI服务器都有一个Spark上下文。
有没有办法在不同的Spark上下文之间共享RDD?

没有,RDD绑定到单个
SparkContext
。一般的想法是,你有一个Spark集群和一个驱动程序,告诉集群该做什么。此驱动程序将在RDD上执行
SparkContext
和启动操作


如果您只想将RDD从一个驱动程序移动到另一个驱动程序,解决方案是将其写入第一个驱动程序中的磁盘(S3/HDFS/…),然后从另一个驱动程序中的磁盘加载。

正如Daniel Darabos所述,这是不可能的。Spark中的每个分布式对象都被绑定到用于创建它的特定上下文(
SparkContext
对于RDD,
SQLContext
对于
DataFrame
dataset)。如果希望在应用程序之间共享对象,则必须使用共享上下文(例如,请参见或)。由于
RDD
DataFrame
只是一个小的本地对象,因此实际上没有太多可共享的内容


共享数据是一个完全不同的问题。您可以使用专门的内存缓存()或分布式内存文件系统(如前Tachyon)来最小化在应用程序之间切换时的延迟,但您无法真正避免延迟。

据我所知,RDD不是数据,而是通过转换/过滤从原始数据创建数据的方法

另一个想法是共享最终数据。因此,您将在数据存储中存储RDD,例如: -HDFS(拼花锉刀等) -弹性搜索 -ApacheIgnite(内存中)

我想你会喜欢ApacheIgnite:

ApacheIgnite提供了Spark RDD抽象的实现 允许跨多个Spark轻松共享内存中的状态 同一应用程序内或不同应用程序之间的作业 应用程序

IgniteRDD实现为分布式Ignite缓存上的视图, 可以在Spark作业执行过程中部署, 或者在Spark worker上,或者在它自己的集群中

(我让您挖掘他们的文档,以找到您要查找的内容。)