在AZURE hdinsights中将带有12个嵌套级别的json文件读入hive

时间:2017-09-13 08:57:21

标签: json hive apache-spark-sql spark-dataframe hdinsight

enter image description here我试图手动为json文件创建一个模式,并尝试创建一个Hive表,我得到了 列类型名称长度10888超过最大允许长度2000

我猜我必须更改Metastore细节,但我不确定配置位于azure Hdinsights中。

我试过的其他方式是 我从spark数据框中获取了模式,我尝试从视图中创建表,但我仍然得到相同的错误。

这是我在spark中尝试的步骤

val tne1 = sc.wholeTextFiles("wasb:path").map(x=>x._2)
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
val tne2 = sqlContext.read.json(tne1)   
tne2.createOrReplaceTempView("my_temp_table");
sqlContext.sql("create table s  ROW FORMAT SERDE  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES (  'hive.serialization.extend.nesting.levels'='true') as select * from my_temp_table")

我在此步骤中收到错误

org.apache.spark.sql.AnalysisException:org.apache.hadoop.hive.ql.metadata.HiveException:InvalidObjectException(消息:无效的列类型名称长度5448超过了允许的最大长度2000,类型为struct

当我尝试持久化或创建rdd时,我会在格式化视图中获取模式。即使我得到完整的视图,我也可以提取模式。

1 个答案:

答案 0 :(得分:0)

我通过Ambari添加了以下属性> Hive>配置>高级>自定义蜂巢网站: hive.metastore.max.typename.length = 14000。  现在我能够创建列类型名称长达14000的表格