相关疑难解决方法(0)

如何使用 ParquetWriter 将 TIMESTAMP 逻辑类型 (INT96) 写入镶木地板?

我有一个工具,它使用org.apache.parquet.hadoop.ParquetWriter将 CSV 数据文件转换为镶木地板数据文件。

目前,它只能处理int32doublestring

我需要支持 parquettimestamp逻辑类型(注释为 int96),我不知道如何做到这一点,因为我在网上找不到精确的规范。

似乎这种时间戳编码(int96)很少见,并且没有得到很好的支持。我在网上找到的规格细节很少。这个 github README声明:

保存为 int96 的时间戳由一天中的纳秒(前 8 个字节)和儒略日(后 4 个字节)组成。

具体来说:

  1. 我对MessageType架构中的列使用哪种镶木地板类型?我假设我应该使用原始类型,但我不确定是否有办法指定逻辑类型?PrimitiveTypeName.INT96
  2. 我如何写入数据?即以什么格式将时间戳写入组?对于 INT96 时间戳,我假设我必须编写一些二进制类型?

这是我的代码的简化版本,它演示了我正在尝试做什么。具体来说,看看“TODO”注释,这是代码中与上述问题相关的两点。

List<Type> fields = new ArrayList<>();
fields.add(new PrimitiveType(Type.Repetition.OPTIONAL, PrimitiveTypeName.INT32, "int32_col", null));
fields.add(new PrimitiveType(Type.Repetition.OPTIONAL, PrimitiveTypeName.DOUBLE, "double_col", null));
fields.add(new PrimitiveType(Type.Repetition.OPTIONAL, PrimitiveTypeName.STRING, "string_col", null));

// TODO: 
//   Specify the TIMESTAMP type. 
//   How? INT96 primitive type? Is there a logical timestamp type I can use …
Run Code Online (Sandbox Code Playgroud)

java hadoop apache-spark parquet

8
推荐指数
2
解决办法
1万
查看次数

标签 统计

apache-spark ×1

hadoop ×1

java ×1

parquet ×1