Apache spark 如何处理Spark写入错误?
这是一个关于火花错误处理的问题。Apache spark 如何处理Spark写入错误?,apache-spark,error-handling,apache-spark-sql,Apache Spark,Error Handling,Apache Spark Sql,这是一个关于火花错误处理的问题。 特别是——处理写入目标数据存储的错误 形势 我正在写入一个不支持幂等插入(在我的例子中)的非事务性数据存储,并希望实现写入失败的错误处理,以避免多次插入数据 所以我想处理的情况是: 已创建数据帧/DAG 所有已执行、已成功读取数据、在spark作业中保持(可在内存中) 写入目标-但会引发异常/中途失败/不可用 在这种情况下,Spark将重试写操作(由于自定义目标数据存储的性质,无法回滚),因此可能会重复数据 问题。 Spark处理此类案件的正确方法是什么 选项1
特别是——处理写入目标数据存储的错误 形势 我正在写入一个不支持幂等插入(在我的例子中)的非事务性数据存储,并希望实现写入失败的错误处理,以避免多次插入数据 所以我想处理的情况是:
如果它是三个提议中的任何一个--它如何实现 非常感谢您在这件事上的任何帮助
提前感谢…我将在驱动程序级别实现错误处理,但这需要额外的查询(您无论如何都需要)。基本上你需要
val df : DataFrame = ???
df.cache() // if that fits into memory
val uniqueKeys = Seq("ID")
val noDuplicates = df.groupBy(uniqueKeys.head,uniqueKeys.tail:_*).count().where($"count">0).isEmpty
val notAlreadyExistsInTarget = spark.table(<targettable>).join(df,uniqueKeys,"leftsemi").isEmpty
if(noDuplicates && notAlreadyExistsInTarget) {
df.write // persist to your datastore
} else {
throw new Exception("df contains duplicates / already exists")
}
val-df:DataFrame=???
df.cache()//如果它适合内存
val唯一键=序号(“ID”)
val noDuplicates=df.groupBy(uniqueKeys.head,uniqueKeys.tail:*).count()。其中($“count”>0)。isEmpty
val notalreadyexistintarget=spark.table().join(df,uniquekey,“leftsemi”).isEmpty
如果(目标中已存在节点副本(&N){
df.write//persist到您的数据存储
}否则{
抛出新异常(“df包含重复项/已存在”)
}
好问题:)我想我们需要更多地了解您的目标数据存储。