hadoop - hive 在 Spark 上。读取 Parquet 文件

标签 hadoop hive avro parquet spark-avro

我正在尝试将 parquet 文件读入 Spark 上的 Hive。

所以我发现我应该做这样的事情:

CREATE TABLE avro_test ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' STORED 
AS AVRO TBLPROPERTIES ('avro.schema.url'='/files/events/avro_events_scheme.avsc'); 

CREATE EXTERNAL TABLE parquet_test LIKE avro_test STORED AS PARQUET LOCATION '/files/events/parquet_events/';

我的 avro 方案在哪里:

{
 "type" : "parquet_file",
    "namespace" : "events",
    "name" : "events",
    "fields" : [
            { "name" : "category" , "type" : "string" },
            { "name" : "duration" , "type" : "long" },
            { "name" : "name" , "type" : "string" },
            { "name" : "user_id" , "type" : "string"},
            { "name" : "value" , "type" : "long" }
    ]
 }

结果我收到一个错误:

org.apache.spark.sql.catalyst.parser.ParseException: 
Operation not allowed: ROW FORMAT SERDE is incompatible with format 'avro', 
which also specifies a serde(line 1, pos 0)

最佳答案

I think we have to add inputforamt and outputformat classes. 

CREATE TABLE parquet_test
ROW FORMAT SERDE
   'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT  
  'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT
   'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
TBLPROPERTIES (
  'avro.schema.url''avro.schema.url'='/hadoop/avro_events_scheme.avsc');

I hope above would work. 

关于hadoop - hive 在 Spark 上。读取 Parquet 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45241748/

相关文章:

java - 如何有效地在 Java 中对两个 TreeMap 求和?

linux - 无法创建数据库路径文件 :/user/hive/warehouse Error

Python 等同于 hive 数值直方图

json - 正则表达式:是否可以在捕获组内进行替换?

java - 如何使用 Spark 从 csv 文件写入 avro 文件?

windows - Windows : ERROR crawl. 喷油器上的 Nutch

hadoop - 是否可以在不(错误)使用异常的情况下检查 HDFS 上的文件是否是 SequenceFile?

hadoop - 使用Nutch Content Limit的建议

hadoop - 配置单元:根据查询结果插入多个表

java - Avro 迭代 GenericRecord