Hadoop Spark配置单元上下文-带分区的Avro表&;大写字段名

Hadoop Spark配置单元上下文-带分区的Avro表&;大写字段名,hadoop,apache-spark,hive,apache-spark-sql,avro,Hadoop,Apache Spark,Hive,Apache Spark Sql,Avro,对于分区的Avro配置单元表,在Avro架构中具有大写字符的字段名将作为null被拉回。我想知道我是否缺少一些设置/解决方法,或者这仅仅是一个关于配置单元上下文的bug 我已经尝试将以下内容添加到DDL中: WITH SERDEPROPERTIES ('casesensitive'='FieldName') 。。。并将spark.sql.caseSensitive设置为true/false Spark版本1.5.0 配置单元版本1.1.0 您可以通过在配置单元中运行以下DDL来重新创建问题:

对于分区的Avro配置单元表,在Avro架构中具有大写字符的字段名将作为null被拉回。我想知道我是否缺少一些设置/解决方法,或者这仅仅是一个关于配置单元上下文的bug

我已经尝试将以下内容添加到DDL中:

 WITH SERDEPROPERTIES ('casesensitive'='FieldName')
。。。并将spark.sql.caseSensitive设置为true/false

Spark版本1.5.0 配置单元版本1.1.0

您可以通过在配置单元中运行以下DDL来重新创建问题:

-- Hive DDL using partitions
CREATE TABLE avro_partitions (Field string)
PARTITIONED BY (part string)
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.literal'=
  '{ "type":"record", "name":"avro_partitions", "namespace":"default", "fields":[ {"name":"Field", "type":"string"} ] }');
INSERT INTO avro_partitions PARTITION (part='01') VALUES('test');

-- Hive DDL without partitions
CREATE TABLE avro_no_partitions (Field string)
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.literal'=
  '{ "type":"record", "name":"avro_no_partitions", "namespace":"default", "fields":[ {"name":"Field", "type":"string"} ] }');
INSERT INTO avro_no_partitions VALUES('test');
",然后尝试使用Spark SQL(Spark shell)从表中进行选择:


问题是在TBLProperty中指定avro.schema.literal-应在SerdeProperty中指定:

Spark版本1.6.0

sqlContext.sql("select * from default.avro_partitions").show
+-----+----+
|field|part|
+-----+----+
| null|  01|
+-----+----+

sqlContext.sql("select * from default.avro_no_partitions").show
+-----+
|field|
+-----+
| test|
+-----+
CREATE TABLE avro_partitions (Field string)
PARTITIONED BY (part string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
WITH SERDEPROPERTIES ('avro.schema.literal'='{ "type":"record", "name":"avro_partitions", "namespace":"default", "fields":[ {"name":"Field", "type":"string"} ] }')
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat';
INSERT INTO avro_partitions PARTITION (part='01') VALUES('test');