首页 文章

从文件中读取Parquet模式

提问于
浏览
0

我正在尝试构建一个通用的转换程序,其中输入是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);
}

请建议前进/错误的方式!

1 回答

  • 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));" + 
                "};";
    

    这也很好 .

相关问题