Apache spark 如何使另一个Spark应用程序可以访问Spark数据集流到内存?

Apache spark 如何使另一个Spark应用程序可以访问Spark数据集流到内存?,apache-spark,spark-streaming,Apache Spark,Spark Streaming,我有一个Java应用程序作为Spark的驱动程序应用程序。它进行一些数据处理,并将数据的子集流到内存中 示例代码: 现在我需要另一个python应用程序来访问这个数据集(orderdataDS) 如何实现这一点?除非两个应用程序共享同一个JVM驱动程序进程(如齐柏林飞艇),否则您无法做到这一点。如果您希望在多个应用程序之间共享数据,请使用独立存储,如RDBMS 总体内存接收器为: 这应该用于在低数据量上进行调试,因为整个输出都被收集并存储在驱动程序内存中 不能,除非两个应用程序共享同一个JVM驱

我有一个Java应用程序作为Spark的驱动程序应用程序。它进行一些数据处理,并将数据的子集流到内存中

示例代码: 现在我需要另一个python应用程序来访问这个数据集(orderdataDS)


如何实现这一点?

除非两个应用程序共享同一个JVM驱动程序进程(如齐柏林飞艇),否则您无法做到这一点。如果您希望在多个应用程序之间共享数据,请使用独立存储,如RDBMS

总体内存接收器为:

这应该用于在低数据量上进行调试,因为整个输出都被收集并存储在驱动程序内存中


不能,除非两个应用程序共享同一个JVM驱动程序进程(如齐柏林飞艇)。如果您希望在多个应用程序之间共享数据,请使用独立存储,如RDBMS

总体内存接收器为:

这应该用于在低数据量上进行调试,因为整个输出都被收集并存储在驱动程序内存中


在上述答案的基础上,Spark并没有考虑到并发性。正如回答者所建议的,您需要使用RDBMS之类的“状态存储”来回击Spark。进行此操作时,有大量选项。我已经详细介绍了它们中的大多数

以上述答案为基础,Spark并不是在考虑并发性的情况下构建的。正如回答者所建议的,您需要使用RDBMS之类的“状态存储”来回击Spark。进行此操作时,有大量选项。我已经详细说明了其中的大多数

“作业是计划好的,一次一个地进行。”这肯定是不正确的。对不起,这是一个过分简单化的说法。严格来说,任何单个应用程序都可以运行多个作业,但两个并发用户不能在同一集群上同时运行自己的程序。如果用户1缓存其作业的结果,则用户2无法运行其他程序并访问缓存的结果。用户2需要一组独立的资源(执行器),并且对缓存没有可见性。“但是两个并发用户不能在同一个集群上同时运行自己的程序。”我认为这是任何Spark集群的目标,例如Mesos、Thread甚至Spark Standalone。其余的都是正确的。“作业是计划好的,一次只做一个。”这肯定是不正确的。对不起,这是一个过分简单化的说法。严格来说,任何单个应用程序都可以运行多个作业,但两个并发用户不能在同一集群上同时运行自己的程序。如果用户1缓存其作业的结果,则用户2无法运行其他程序并访问缓存的结果。用户2需要一组独立的资源(执行器),并且对缓存没有可见性。“但是两个并发用户不能在同一个集群上同时运行自己的程序。”我认为这是任何Spark集群的目标,例如Mesos、Thread甚至Spark Standalone。其余部分是正确的。Spark SQL中的全局临时视图临时视图是会话作用域,如果创建它的会话终止,它们将消失。如果希望在所有会话之间共享临时视图,并在Spark应用程序终止之前保持活动状态,则可以创建全局临时视图。全局临时视图绑定到系统保留的数据库全局临时视图,我们必须使用限定名称来引用它,例如从全局临时视图1中选择*。Scala Java Python SQL如果我保存的数据在全局临时视图中,并且创建该数据的驱动程序仍然处于活动状态,我是否可以使用诸如SELECT*FROM global_temp.viewname之类的语法查询该数据?Spark SQL中的全局临时视图临时视图是会话范围,并且如果创建该数据的会话终止,该视图将消失。如果希望在所有会话之间共享临时视图,并在Spark应用程序终止之前保持活动状态,则可以创建全局临时视图。全局临时视图绑定到系统保留的数据库全局临时视图,我们必须使用限定名称来引用它,例如从全局临时视图1中选择*。Scala Java Python SQL如果我保存的数据在全局临时视图中,并且创建该数据的驱动程序仍然处于活动状态,我可以使用类似SELECT*FROM global_temp.viewname的语法查询它吗?
    ds.writeStream()
    .format("memory")
    .queryName("orderdataDS")
    .start();