读取实木复合地板文件时如何检查损坏的文件?

时间:2019-05-16 07:07:59

标签: parquet

从hdfs读取实木复合地板时遇到一些问题,这些地板是我的程序定期生成的。因此,如果程序由于某种原因而关闭,它可能会产生一些损坏的文件。

现在,我要告诉的是正常损坏的文件,然后转到备份目录。但是我找不到一种很好的方法。

我遇到过两种损坏的文件:

1.parquet is not a Parquet file (too small length: 4)

在这种情况下,由于其大小,很容易分辨

2.parquet is not a Parquet file. expected magic number at tail [80, 65, 82, 49] but found [56, 52, 53, 51]

在这种情况下,我不知道要从普通的书中讲到读到它。

我已阅读以下网站: https://datameer.zendesk.com/hc/en-us/articles/360006392072-Workbook-Fails-path-to-file-Is-Not-a-Parquet-File-Expected-Magic-Number-at-Tail

据此,“将比其他文件低。>,但我找不到它。

有什么好的解决方案吗?谢谢。

2 个答案:

答案 0 :(得分:0)

我找到了一种检查损坏文件的方法。我将ParquetFileReader.java中的readFooter()函数复制到我的项目中,并使用迭代器获取所有镶木地板文件并将readFooter()应用到它们。最后将这些损坏的文件保存到一个数组中,然后将其移动到另一个目录中。

答案 1 :(得分:0)

两个错误均表明在写入过程中未正确关闭实木复合地板文件。我建议不要修改阅读时的损坏,而是修改如下的编写逻辑:

  1. 在读者看不到的临时目录中创建新的实木复合地板文件
  2. 写入要写入的数据并关闭文件
  3. 将文件移动到正确的位置,以便读者可以找到它

因此,阅读器将仅观察正确关闭的文件。损坏的文件将保留在临时目录中。