【问题标题】:Spark - how to skip or ignore empty gzip files when readingSpark - 阅读时如何跳过或忽略空的gzip文件
【发布时间】:2017-08-31 00:27:34
【问题描述】:

我有几百个文件夹,每个文件夹在 s3 中都有数千个压缩文本文件,我正在尝试将它们读入带有 spark.read.csv() 的数据框。

文件中有一些长度为零,导致报错:

java.io.EOFException: 输入流意外结束

代码:

df = spark.read.csv('s3n://my-bucket/folder*/logfiles*.log.gz',sep='\t',schema=schema)

我尝试将mode 设置为DROPMALFORMED 并使用sc.textFile() 阅读,但没有运气。

处理空的或损坏的 gzip 文件的最佳方法是什么?

【问题讨论】:

    标签: pyspark spark-dataframe pyspark-sql


    【解决方案1】:

    从 Spark 2.1 开始,您可以通过启用 spark.sql.files.ignoreCorruptFiles 选项来忽略损坏的文件。将此添加到您的 spark-submit 或 pyspark 命令中:

    --conf spark.sql.files.ignoreCorruptFiles=true

    【讨论】:

    • 此配置记录在哪里?我在spark.apache.org/docs/latest/configuration.html没有找到它
    • 它不在官方文档中,但包含在 Jira 票证中:issues.apache.org/jira/browse/SPARK-19082 并由 spark 贡献者小李在此演示文稿中引用:fr.slideshare.net/databricks/…
    • 2.3.0 也没有在线记录。要显示所有 spark.sql.* 配置选项 - 在 pyspark 中运行:spark.sql("SET -v").show(n=200, truncate=False),其中 spark 是 SparkSession 对象
    • 我已经使用 pyspark 测试了 spark.sql.files.ignoreCorruptFiles,它不能处理 S3 中的空 gzip 压缩 csv 文件。除了编写脚本来查找和删除它们之外,我还没有找到解决方法。
    • @minus34,你忽略它们的策略/方法是什么?我目前有这种 hack-y 管道方法,在程序中、标准输出和搜索文件 > 0...实际上就像 hadoop fs -ls /input/folder/*.gz | grep <files where size is nonzero... 然后迭代加载每个非零文件并执行联合
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2017-11-03
    • 1970-01-01
    • 2011-12-13
    • 2019-06-15
    • 2015-03-31
    • 1970-01-01
    相关资源
    最近更新 更多