在条件语句中结束spark作业的推荐方法是什么?
我正在对我的数据进行验证,如果错误,我想优雅地结束火花工作。
现在我有:
StorageFolder picturesFolder = KnownFolders.PicturesLibrary;
var _tempMediaFolder = await picturesFolder.CreateFolderAsync("media", CreationCollisionOption.OpenIfExists);
IReadOnlyList<StorageFile> storageFilesOperation = await _tempMediaFolder.GetFilesAsync();
foreach(StorageFile f in storageFilesOperation)
{
await f.DeleteAsync();
}
但是,我收到以下错误:
if (isValid(data)) {
sparkSession.sparkContext.stop()
}
然后它显示了一个堆栈跟踪。
Exception in thread "main" java.lang.IllegalStateException: SparkContext has been shutdown
不是正确结束点火工作的正确方法吗?
答案 0 :(得分:0)
因此,您无法调用任何与sparkContext相关的对象/函数来创建RDD / Dataframe或其他任何内容。 如果你在程序流程中再次调用相同的sparksession ..你应该找到上面的例外。 例如。
` val rdd=sc.parallelize(Seq(Row("RAMA","DAS","25"),Row("smritu","ranjan","26")))
val df=spark.createDataFrame(rdd,schema)
df.show() //It works fine
if(df.select("fname").collect()(0).getAs[String]("fname")=="MAA"){
println("continue")
}
else{
spark.stop() //stopping sparkSession
println("inside Stopiing condition")
}
println("code continues")
val rdd1=sc.parallelize(Seq(Row("afdaf","DAS","56"),Row("sadfeafe","adsadaf","27")))
//Throws Exception...
val df1=spark.createDataFrame(rdd1,schema)
df1.show()
`
答案 1 :(得分:0)
没有什么可说的,你不能在stop
声明中调用if
,但没有理由这样做,这可能是错误的。您的问题似乎暗示您可能正在尝试打开多个Spark会话。
Spark会话打算在程序的生命周期内保持打开状态 - 如果你尝试启动两个,你会发现Spark抛出异常并打印一些背景,包括一个讨论主题的JIRA票据到日志。
如果您希望运行多个Spark任务,可以将它们提交到相同的上下文。一个上下文可以同时运行多个任务。