Я использую следующий метод для записи данных в файл паркета:
static void toParquet() {
String schema = "message spark_schema {\n optional binary stringField (UTF8);\n optional INT96 createdAt;\n}";
MessageType readSchema = MessageTypeParser.parseMessageType(schema);
Configuration configuration = new Configuration();
GroupWriteSupport.setSchema(readSchema, configuration);
SimpleGroupFactory sfg = new SimpleGroupFactory(readSchema);
Path file = new Path("/home/user/data-" + System.currentTimeMillis() + ".parquet");
try {
ParquetWriter<Group> writer = new ParquetWriter<Group>(file, new GroupWriteSupport(), CompressionCodecName.UNCOMPRESSED, 1024, 1024, 512,
true, false, ParquetProperties.WriterVersion.PARQUET_1_0, configuration);
for (int i = 0; i < 10000; ++i) {
writer.write(sfg.newGroup().append("stringField", "abc").append("createdAt", String.valueOf(System.currentTimeMillis())));
}
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Но это дает мне следующее исключение:
java.lang.IllegalArgumentException: Fixed Binary size 13не соответствует длине типа поля 12 в org.apache.parquet.column.values.plain.FixedLenByteArrayPlainValuesWriter.writeBytes (FixedLenByteArrayPlainValuesWriter.java:53) в org.apache.parquet.column.values.rituesWerWirectoryFritictionWrial.java: 324) at org.apache.parquet.column.values.fallback.FallbackValuesWriter.createDictionaryPage (FallbackValuesWriter.java:102) в org.apache.parquet.column.impl.ColumnWriterV1.flush (ColumnWriterV1.j)org.apache.parquet.column.impl.checkBlockSizeReached (InternalParquetRecordWriter.java:141) в org.apache.parquet.hadoop.InternalParquetRecordWriter.write (InternalParquetRecordWriter.java:123) в org.apache.parquet.hadoop.ParquetWriter.app.jp (parj).test.SimpleParquet.toParquet (SimpleParquet.java:498) в com.app.test.SimpleParquet.main (SimpleParquet.java:63)
Поскольку System.currentTimeMillis () дает 13-байтовое значение иВремя epoc составляет 10 байт, как обеспечить значение int96 для текущей метки времени, которая представляет собой массив из 12 байтов фиксированной длины.
Я обнаружил некоторые потоки, в которых они говорят, что метка времени представляет собой комбинацию юлианского дня и времени в наносекундах,Как я могу преобразовать текущую метку времени в этот формат?