单个JVM中有多个SparkSession

问题描述

不支持,也不会。SPARK-2243解决为“无法修复”。

如果您需要多个上下文,那么可以使用不同的项目来帮助您(Mist,Livy)。

文档getOrCreate状态

方法首先检查是否存在有效的线程本地SparkSession,如果是,则返回该线程。然后,它检查是否存在有效的全局默认SparkSession,如果是,则返回该默认值。如果不存在有效的全局默认SparkSession,则该方法将创建一个新的SparkSession并将新创建的SparkSession分配为全局默认值。

还有一种方法SparkSession.newSession表明

使用隔离的sql配置开始新的会话,隔离临时表,注册功能,但共享底层的SparkContext和缓存的数据。

因此,我想您问题的答案是,您可以有多个会话,但是SparkContext每个JVM仍将有一个会话供所有会话使用。

我能想象,一个用于Web应用程序可能的情形是创建一个SparkSession或者每个请求,或者如HTTP会话并用它来按照要求或用户会话隔离星火执行< -因为我很新的火花- CAN有人确认吗?

解决方法

我有一个关于在一个JVM中创建多个Spark会话的查询。我已经读过,在早期版本的Spark中不建议创建多个上下文。Spark 2.0中的SparkSession也是如此。

我正在考虑从UI调用Web服务或servlet,然后该服务创建一个spark会话,执行一些操作并返回结果。这将导致为客户端的每个请求创建一个火花会话。是否推荐这种做法?

说我有一个类似的方法:

public void runSpark()引发异常{

        SparkSession spark = SparkSession
          .builder()
          .master("spark://<masterURL>")
          .appName("JavaWordCount")
          .getOrCreate();

等等....

如果将这种方法放在Web服务中,会不会有JVM问题?因此,我可以从main方法多次调用此方法,但不确定这是否是一种好习惯。

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”