在pig中使用 parquet 上的hive表

hts6caw3  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(385)

我正在尝试创建一个配置单元表,在包含两个Parquet文件的文件夹中使用模式字符串string,double。第一个Parquet文件模式是string,string,double,第二个文件的模式是string,double,string。

CREATE EXTERNAL TABLE dynschema (
 trans_date string,
 currency string,
 rate double) 
STORED AS PARQUET
LOCATION '/user/impadmin/test/parquet/evolution/';

我正在尝试使用pig(0.14)脚本中的配置单元表。

A = LOAD 'dynschema' USING org.apache.hive.hcatalog.pig.HCatLoader();

DUMP A;

但我得到了错误
java.lang.unsupportedoperationexception:无法检查org.apache.hadoop.hive.serde2.io.doublewritable
我怀疑这是由于第二个文件的模式与表模式不同,因为第一个文件的拆分已成功读取,但在读取第二个文件的拆分时会发生此异常。
我还调查了 HCatRecordReader's 找到了这段代码

DefaultHCatRecord dr = new DefaultHCatRecord(outputSchema.size());
  int i = 0;
  for (String fieldName : outputSchema.getFieldNames()) {
    if (dataSchema.getPosition(fieldName) != null) {
      dr.set(i, r.get(fieldName, dataSchema));
    } else {
      dr.set(i, valuesNotInDataCols.get(fieldName));
    }
    i++;
  }

在这里,我看到了从数据模式到输出模式的转换逻辑,但是在调试时,我发现这两种模式没有区别。
请帮我看看,
pig支持这样的情况,即从在具有不同模式的多个Parquet文件上创建的配置单元表中读取数据。
如果是,怎么做。

z31licg0

z31licg01#

如果您的文件有两种不同的架构,那么以下内容似乎是合理的:
根据文件所具有的模式来拆分文件
用它们做table
如果需要,加载各个表并将它们存储到超级表中

相关问题