Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 在猪的拼花地板上使用蜂巢桌_Hadoop_Hive_Apache Pig_Parquet_Hcatalog - Fatal编程技术网

Hadoop 在猪的拼花地板上使用蜂巢桌

Hadoop 在猪的拼花地板上使用蜂巢桌,hadoop,hive,apache-pig,parquet,hcatalog,Hadoop,Hive,Apache Pig,Parquet,Hcatalog,我试图在包含两个拼花文件的文件夹中创建一个配置单元表,其中包含模式字符串、字符串和双精度。第一个拼花文件模式是string,string,double,第二个文件的模式是string,double,string 我正在尝试使用pig(0.14)脚本中的配置单元表 但是我得到了错误 java.lang.UnsupportedOperationException:无法检查org.apache.hadoop.hive.serde2.io.DoubleWritable 我怀疑这是由于第二个文件的架构与表

我试图在包含两个拼花文件的文件夹中创建一个配置单元表,其中包含模式字符串、字符串和双精度。第一个拼花文件模式是string,string,double,第二个文件的模式是string,double,string

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

但是我得到了错误

java.lang.UnsupportedOperationException:无法检查org.apache.hadoop.hive.serde2.io.DoubleWritable

我怀疑这是由于第二个文件的架构与表架构不同,因为第一个文件的拆分已成功读取,但在读取第二个文件的拆分时发生此异常

我还查看了HCatRecordReader的代码,找到了这段代码

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支持从配置单元表中读取数据,这些配置单元表是在具有不同模式的多个拼花文件上创建的

  • 如果是,怎么做


  • 如果您的文件具有两种不同的架构,那么以下内容似乎是合理的:

  • 根据文件所具有的架构拆分文件
  • 用它们做桌子
  • 如果需要,加载各个表并将它们存储到超级表中

  • 如果您知道模式,那么可以使用pig Parquet loader读取文件并手动指定模式,这将触发模式演变。我不确定它在这个特定的情况下是否会有帮助,尽管模式的演变似乎很难做到。Avro也会这样吗?我不知道pig Avro存储是如何工作的。我认为您也可以手动指定模式。
     A = LOAD 'dynschema' USING org.apache.hive.hcatalog.pig.HCatLoader();
    
    DUMP A;
    
    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++;
      }