我有一个应用程序来编排批处理作业执行,我想为每个作业执行创建一个SparkSession
- 特别是为了清楚地分离已注册的临时视图,函数等。
因此,这将导致每天数以千计的SparkSessions,这只会在工作期间(从几分钟到几个小时)生效。有没有争论不这样做?
我知道每个JVM只有一个SparkContext
这个事实。我也知道SparkContext
执行一些JVM全局缓存,但这对于这种情况究竟意味着什么呢?什么是例如缓存在SparkContext
中,如果使用这些会话执行了许多火花作业,会发生什么?
答案 0 :(得分:1)
这显示了如何使用不同的配置构建多个会话
使用
spark1.clearActiveSession();
spark1.clearDefaultSession();
要清除会话。
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。 如果会话在任何时候都另存为视图,则可以访问表。 最好使用唯一的ID为您的作业执行多个spark-submit,而不要使用不同的配置。