当前位置: 首页 > 知识库问答 >
问题:

在 Pig 中使用蜂巢表在镶木地板上

屠坚壁
2023-03-14

我试图创建一个Hive表与模式字符串,字符串,双在包含两个拼花文件的文件夹上。第一个拼花文件模式是字符串,字符串,双,第二个文件的模式是字符串,双,字符串

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

我正在尝试使用pig(0.14)脚本中的hive表。

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

DUMP A;

但我得到了错误

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

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

我还查看了< code > 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 支持从基于具有不同架构的多个 Parquet 文件创建的配置单元表中读取数据的情况。

    如果是,如何做到这一点。

  • 共有1个答案

    景仲渊
    2023-03-14

    如果您的文件具有两种不同的模式,以下内容似乎是合理的:

    1. 根据文件具有的架构拆分文件
    2. 用它们制作桌子
    3. 如果需要,加载各个表并将其存储到超级表中
     类似资料:
    • 我正在尝试将存储在HDFS(100Gbs)上的一堆多部分avro文件转换为拼花文件(保留所有数据) Hive可以使用以下命令将avro文件作为外部表读取: 但是当我试图设计一张拼花桌时: 它会抛出一个错误: 失败:执行错误,从org.apache.hadoop.hive.ql.exec.DDLTask返回代码1。java.lang.UnsupportedOperationException:未知字

    • 我正在尝试创建一个数据管道,其中incomng数据存储在parquet中,我创建了一个外部配置单元表,用户可以查询配置单元表并检索数据。我可以保存parquet数据并直接检索它,但当我查询配置单元表格时,它不会返回任何行。我做了以下测试设置: -创建外部配置单元表创建外部表emp ( id double,hire_dt时间戳,用户字符串)存储为parquet location '/test/EMP

    • 虽然 Impala 比 Hive 快得多,但我们之所以使用 Hive,是因为它支持复杂(嵌套)数据类型,如数组和映射。 我注意到,从CDH5.5开始,Impala现在支持复杂的数据类型。由于在黑斑羚中也可以运行蜂巢UDF,我们可能可以在黑斑中做任何我们想做的事情,但要快得多。这是个好消息! 当我浏览文档时,我看到Impala希望以镶木地板格式存储数据。我的数据,在原始形式中,恰好是一个两列的CSV

    • 问题内容: 有没有办法从Java创建镶木地板文件? 我的内存中有数据(java类),我想将其写入一个Parquet文件中,以便以后从apache-drill中读取它。 有没有简单的方法可以做到这一点,例如将数据插入sql表? 得到它了 谢谢您的帮助。 结合答案和此链接,我能够创建一个实木复合地板文件并用钻头将其读回。 问题答案: 不建议使用ParquetWriter的构造函数(1.8.1),但不建

    • 我有一个数据帧,它是由运行特定日期的每日批处理创建的,然后保存在HDFS(Azure Data Lake Gen 2)中。 它是用这样的东西保存的 如您所见,我没有对数据帧进行分区,因为它只包含一个日期。 例如,第一天的第一个文件将存储在文件夹中 交易/2019/08/25 然后第二天,它就会在文件夹里 贸易/2019/08/26 问题是,当所有数据都放好后,日期上的过滤器谓词是否仍会被按下,HD

    • 有没有一种方法可以直接从基于avro模式的parquet文件在Amazon Athena中创建表?模式被编码到文件中,所以我需要自己实际创建DDL看起来很愚蠢。 我看到了这个,还有另一个复制品 但它们与Hive直接相关,这对雅典娜不起作用。理想情况下,我正在寻找一种以编程方式执行此操作的方法,而无需在控制台上定义它。