apache-spark - 写入文件时出现Databricks Checksum错误

标签 apache-spark error-handling pyspark azure-databricks delta-lake

我正在9个节点上运行作业。

所有这些都将向文件进行一些简单的写操作,如下所示:

dfLogging.coalesce(1).write.format('delta').mode('append').save('/dbfs/' + loggingLocation)

但是我收到此异常:

py4j.protocol.Py4JJavaError: An error occurred while calling o106.save. : java.util.concurrent.ExecutionException: org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 14.0 failed 1 times, most recent failure: Lost task 1.0 in stage 14.0 (TID 259, localhost, executor driver): org.apache.hadoop.fs.ChecksumException: Checksum error: file:/dbfs/delta/Logging/_delta_log/00000000000000000063.json at 0 exp: 1179219224 got: -1020415797



在我看来,由于并发性,spark在某种程度上失败了,并生成校验和错误。

是否有可能导致这种情况的已知情况?

最佳答案

因此,发生了几件事情,它应该解释为什么合并可能不起作用。

  • 合并的作用实际上是将每个工作程序上的分区合并在一起。例如,如果您有三个工作程序,则可以执行Coalesce(3)合并每个工作程序上的分区。
  • 分区的作用是重新整理数据以增加/减少总分区数。在您的情况下,如果您有多个工作线程,并且需要单个输出,则必须使用repartition(1),因为您希望在写入之前将数据放在单个分区上。

  • 为什么合并不会起作用?
    Spark 限制了合并期间的混洗。因此,当您使用合并时,您无法执行跨不同工作人员的完全改组,而在使用分区时,您可以进行全面的改编,尽管这是一项昂贵的操作。

    这是可行的代码:
    dfLogging.repartition(1).write.format('delta').mode('append').save('/dbfs/' + loggingLocation)
    

    关于apache-spark - 写入文件时出现Databricks Checksum错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57013051/

    相关文章:

    swift - “Fatal error: Unexpectedly found nil while unwrapping an Optional value”是什么意思?

    php - PHP表单处理器错误回传

    csv - 使用pyspark读取csv文件时编码错误

    apache-spark - 使用pyspark,如何将文件中一行上的多个JSON文档读入数据框?

    json - 在 PySpark SQL 中分解 JSON

    apache-spark - 无法压缩分区数不等的 RDD

    windows - 无法在 Windows 10 计算机中启动 'Spark History server'

    java - 如何在 Spark-java 数据框中添加常量列

    scala - spark - select 中的条件语句

    web-services - 网站和网站 REST API 的 Symfony 错误处理