在 Pig 中加载嵌套的 Parquet 文件?
Load Nested Parquet file in Pig?
镶木地板文件是从 Avro 文件创建的。现在我需要在 Pig 中加载 Parquet 文件。以下是我从 parquet-tools schema
命令获得的架构。
message Logs {
optional group SUPER1 {
optional group FIELD1 (LIST) {
repeated int32 array;
}
optional group FIELD2 (LIST) {
repeated int32 array;
}
}
optional group SUPER2 {
optional int32 FIELD1;
optional binary FIELD2 (UTF8);
optional double FIELD3;
optional int32 FIELD4;
optional double FIELD5;
optional binary FIELD6 (UTF8);
}
optional group SUPER3 {
required int32 FIELD1;
required int32 FIELD2;
optional binary FIELD3 (UTF8);
optional binary FIELD4 (UTF8);
}
required binary SUPER4 (UTF8);
optional binary SUPER5 (UTF8);
}
现在我无法理解加载此文件的等效 pig 模式。我正在使用 parquet.pig.ParquetLoader
。我做了以下转换:-
- 数组将加载为
chararray
- 如何加载嵌套数据? bid_info.creative_id 不工作:
mismatched input '.' expecting RIGHT_PAREN
- 我正在加载所有字段,无论是否可选。可选值应在 Pig 中加载为 null。
我也尝试使用没有任何显式模式的简单加载然后我得到了这个错误:
Failed to parse: Invalid list type optional group FIELD1 (LIST) {
repeated int32 array;
}
正确的访问方法是使用 .
运算符,如问题的第 2 点所示。它对我不起作用,因为我使用的是 parquet.pig.ParquetLoader()
。 Parquet for pig 现在已经被 Apache 采用并且拥有最大的支持所以我使用了来自 maven 的 jar 并使用 org.apache.parquet.pig.ParquetLoader()
作为解析器。以下代码有效:-
log_parquet = LOAD 'logs' USING org.apache.parquet.pig.ParquetLoader();
req_parquet 将是一个包含 5 个字段(Super1-5)的元组。字段 Super1,2,3 本身就是元组。 Super1.Field1
和 Super1.Field2
本身就是一包元组,其中数组中的每个元素都是元组。
它相当复杂,但对我有用。
镶木地板文件是从 Avro 文件创建的。现在我需要在 Pig 中加载 Parquet 文件。以下是我从 parquet-tools schema
命令获得的架构。
message Logs {
optional group SUPER1 {
optional group FIELD1 (LIST) {
repeated int32 array;
}
optional group FIELD2 (LIST) {
repeated int32 array;
}
}
optional group SUPER2 {
optional int32 FIELD1;
optional binary FIELD2 (UTF8);
optional double FIELD3;
optional int32 FIELD4;
optional double FIELD5;
optional binary FIELD6 (UTF8);
}
optional group SUPER3 {
required int32 FIELD1;
required int32 FIELD2;
optional binary FIELD3 (UTF8);
optional binary FIELD4 (UTF8);
}
required binary SUPER4 (UTF8);
optional binary SUPER5 (UTF8);
}
现在我无法理解加载此文件的等效 pig 模式。我正在使用 parquet.pig.ParquetLoader
。我做了以下转换:-
- 数组将加载为
chararray
- 如何加载嵌套数据? bid_info.creative_id 不工作:
mismatched input '.' expecting RIGHT_PAREN
- 我正在加载所有字段,无论是否可选。可选值应在 Pig 中加载为 null。
我也尝试使用没有任何显式模式的简单加载然后我得到了这个错误:
Failed to parse: Invalid list type optional group FIELD1 (LIST) {
repeated int32 array;
}
正确的访问方法是使用 .
运算符,如问题的第 2 点所示。它对我不起作用,因为我使用的是 parquet.pig.ParquetLoader()
。 Parquet for pig 现在已经被 Apache 采用并且拥有最大的支持所以我使用了来自 maven 的 jar 并使用 org.apache.parquet.pig.ParquetLoader()
作为解析器。以下代码有效:-
log_parquet = LOAD 'logs' USING org.apache.parquet.pig.ParquetLoader();
req_parquet 将是一个包含 5 个字段(Super1-5)的元组。字段 Super1,2,3 本身就是元组。 Super1.Field1
和 Super1.Field2
本身就是一包元组,其中数组中的每个元素都是元组。
它相当复杂,但对我有用。