我有一些json数据(大约60gb)必须加载到hiveexternal表中。我正在使用Hive3.x和Hadoop3.x。表的架构如下:
CREATE TABLE people(a string, liid string, link string, n string, t string, e string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.JsonSerDe'
STORED AS TEXTFILE LOCATION '/data/db/';
我还为serde加载了jar,如下所示:a DD JAR /usr/hive/lib/hive-hcatalog-core-3.1.2.jar;
如果我复制一个简单的文本json(或load),那么dml查询(select等)就可以正常工作。由于数据文件非常大,因此我已将其压缩(现在为20gb)。我已经将这个压缩文件加载到配置单元表(上面创建的)中。
hive> select * from people;
OK
Failed with exception java.io.IOException:org.apache.hadoop.hive.serde2.SerDeException: java.io.IOException: Field name expected
Time taken: 0.096 seconds
hive>
它可以很好地处理未压缩的数据。这有什么问题?
我试过一些这样的解决办法,但没有成功
1条答案
按热度按时间7kjnsjlb1#
我自己找到了解决办法。实际问题是有两列是json中的数组。它们应该Map到配置单元中的数组。我为schema获取的示例不包含这些数组。因此,通过将字段类型更改为
array<<string>>
一个专栏解决了我的问题。