从文件中读取Parquet模式

时间:2017-10-30 18:38:02

标签: csv parquet

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

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

这也很好。