检查文件是否是orc文件

x33g5p2x  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(534)

我有一个程序的输入预期有一个兽人的文件格式。
我想能够检查提供的输入是否有效地是一个orc文件。仅检查扩展名是不够的,因为用户可以忽略扩展名。
例如,对于parquet,我们可以检查第一行是否包含“par1”。
兽人有没有一个等价的方法?

jum4pzuy

jum4pzuy1#

正如@ed elliott所提到的,orc文件包含了尾部的信息。orc文件最后一个字节前的3个字节包含“orc”。以下是为我编写的代码:

val mainPath = Paths.get(new URI(path)).toString
val buffer = ByteBuffer.allocate(3)
val channel = FileChannel.open(Paths.get(mainPath), StandardOpenOption.READ)
channel.read(buffer, channel.size - 4)
new String(buffer.array(), StandardCharsets.UTF_8).equals("ORC")

值得一提的是,如果要读取的字节数是常量,那么读取的时间复杂度是o(1)。所以read不会遍历整个文件。

vhmi4jdf

vhmi4jdf2#

令人烦恼的是,他们有一个类似的东西Parquet文件与魔术字符串兽人,但它是在文件的结尾。
https://orc.apache.org/specification/orcv0/
在文件末尾之前完成一个字节的是postscript,postscript的最后三个字节是orc,所以你应该读取最后4个字节,应该是orc之类的。
我会用十六进制编辑器来验证这个!

相关问题