我有一个协调批处理作业执行的应用程序,我想为每个作业执行创建一个SparkSession
-尤其是为了使注册的临时 View ,函数等完全分开。
因此,这将导致每天成千上万个SparkSession,仅在工作期间(从几分钟到几个小时)有效。有什么理由不这样做吗?
我知道一个事实,每个JVM只有一个SparkContext
。我也知道SparkContext
执行一些JVM全局缓存,但这对这种情况到底意味着什么?什么是缓存在SparkContext
中,如果使用这些 session 执行许多 Spark 作业,将会发生什么?
最佳答案
这显示了如何使用不同的配置来构建多个 session
使用
spark1.clearActiveSession();
spark1.clearDefaultSession();
清除 session 。
SparkSession spark1 = SparkSession.builder()
.master("local[*]")
.appName("app1")
.getOrCreate();
Dataset<Row> df = spark1.read().format("csv").load("data/file1.csv");
df.show();
spark1.clearActiveSession();
spark1.clearDefaultSession();
SparkSession spark2 = SparkSession.builder()
.master("local[*]")
.appName("app2")
.getOrCreate();
Dataset<Row> df2 = spark1.read().format("csv").load("data/file2.csv");
df2.show();
您的问题。
Spark上下文将rdds保存在内存中,以加快处理速度。
如果有大量数据。保存表或rdds将移至hdd。
如果 session 在任何时候都另存为 View ,则可以访问表。
最好使用唯一的ID为您的作业执行多个spark-submit,而不要使用不同的配置。
关于apache-spark - 创建许多短暂的SparkSession,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43013542/