我正在尝试构建一个通用的转换程序,其中输入是csv文件,它们的模式位于单独的文件中。输出是压缩的镶木地板文件。
当我在程序中嵌入csv的模式时,它工作得很好。但是,momemnt我将相同的模式放在一个单独的物理文件中,我从模式文件中读取第一行后得到以下错误信息 -
Caused by: java.lang.IllegalArgumentException: No enum constant org.apache.parquet.schema.Type.Repetition.
我试图查找它,但在Parquet上下文中几乎没有引用此错误。
仅供参考,这是架构 -
message root {
required binary name (UTF8);
required binary city (UTF8);
}
请建议前进/错误的方式!!
答案 0 :(得分:1)
我能够通过将架构定义为以下方式来解决此问题:
message root { optional int32 voter_id; optional binary name (STRING); optional int32 age; optional binary registration (STRING); optional double contributions; optional int32 voterzone; optional int64 date_time (TIMESTAMP(MILLIS,true));};
也就是说,所有列都在一行中。我发现在Windows中,当我们在多行中定义列时,会添加不可见的行尾字符(\ r \ n),这会导致崩溃。或者,您可以在代码中将架构定义为:
String message = "message root { " +
" optional int32 voter_id;" +
" optional binary name (STRING);" +
" optional int32 age;" +
" optional binary registration (STRING);" +
" optional double contributions;" +
" optional int32 voterzone;" +
" optional int64 date_time (TIMESTAMP(MILLIS,true));" +
"};";
这也很好。