我有一个关于在一个JVM中创建多个星火会话的查询。我已经读过,在早期版本的Spark中,不建议创建多个上下文。Spark2.0中的SparkSession也是这样吗?
我正在考虑从UI中调用一个web服务或servlet,然后该服务创建一个火花会话,执行一些操作并返回结果。这将导致为来自客户端的每个请求创建火花会话。推荐这样做吗?
假设我有一种方法,比如:
公共空runSpark()抛出异常{
SparkSession spark = SparkSession
.builder()
.master("spark://<masterURL>")
.appName("JavaWordCount")
.getOrCreate();
等等..。
如果我将此方法放入web服务中,会出现JVM问题吗?因此,我可以从主method.But多次调用该方法,但不确定这是否是一个良好的实践。
发布于 2016-10-20 04:09:18
它没有得到支持,也不会得到支持。火花-2243被解析为解决不了问题。
如果您需要多个上下文,有不同的项目可以帮助您(Mist,Livy)。
发布于 2017-03-24 22:08:21
getOrCreate
状态的文档化
此方法首先检查是否存在有效的线程本地SparkSession,如果有,则返回该线程。然后检查是否存在有效的全局默认SparkSession,如果是,则返回该缺省值。如果不存在有效的全局默认SparkSession,则该方法将创建一个新的SparkSession,并将新创建的SparkSession指定为全局默认值。
还有一个方法SparkSession.newSession
,它指示
使用隔离的SQL配置、临时表、注册函数启动新会话,但共享基础SparkContext和缓存数据。
因此,我猜您的问题的答案是,您可以有多个会话,但是每个SparkContext
仍然有一个,您的所有会话都将使用它。
我可以想象,您的web应用程序的一个可能的场景可能是每个请求创建一个SparkSession
,或者,例如HTTP,并使用它来隔离每个请求或用户会话<--因为我对Spark非常陌生--有人能证实这一点吗?
发布于 2017-09-11 23:10:12
如果您有现有的火花会话,并希望创建新会话,请在现有的newSession方法上使用SparkSession。
import org.apache.spark.sql.{SQLContext, SparkSession}
val newSparkSession = spark.newSession()
newSession方法使用隔离的tables.The配置创建一个新的火花会话,临时tables.The新会话将共享底层的SparkContext
和缓存的数据。
https://stackoverflow.com/questions/40153728
复制相似问题