我在hdfs中有一堆json snappy压缩文件。它们是hadoop snappy压缩的(不是python,cf其他so问题),并且具有嵌套结构。找不到将它们加载到配置单元的方法(使用json\u元组)?我能得到一些关于如何加载它们的资源/提示吗以前的参考资料(没有有效答案)pyspark如何加载压缩snappy文件配置单元:解析json
8qgya5xd1#
如果数据已分区(例如按日期)
CREATE EXTERNAL TABLE IF NOT EXISTS database.table ( filename STRING, cnt BIGINT, size DOUBLE ) PARTITIONED BY ( \`date\` STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION 'folder/path/in/hdfs'
MSCK REPAIR TABLE database.table
esyap4oy2#
将所有文件放在hdfs文件夹中,并在其上创建外部表。如果文件具有.snappy这样的名称,hive将自动识别它们,不过您可以指定 TBLPROPERTIES ("orc.compress"="SNAPPY") ```CREATE EXTERNAL TABLE mydirectory_tbl(id string,name string)ROW FORMAT SERDE'org.openx.data.jsonserde.JsonSerDe'LOCATION '/mydir' --this is HDFS/S3 locationTBLPROPERTIES ("orc.compress"="SNAPPY");
TBLPROPERTIES ("orc.compress"="SNAPPY")
jsonserde可以解析所有复杂的结构,这比使用json\u元组容易得多。json中的简单属性被Map到列,就像方括号中的一样[]是数组<>,{}是结构<>或Map<>,复杂类型可以嵌套。仔细阅读自述:https://github.com/rcongiu/hive-json-serde. 这里有一节介绍嵌套结构和许多createtable示例。 如果您仍然想使用json\u tuple,那么就创建一个字符串列的表,然后使用json\u tuple进行解析。但这要困难得多。 所有json记录都应该是单行的(json对象中没有换行符,以及\r)。这里也提到了这一点https://github.com/rcongiu/hive-json-serde
2条答案
按热度按时间8qgya5xd1#
如果数据已分区(例如按日期)
在配置单元中创建表
恢复分区(在恢复之前,表似乎是空的)
MSCK REPAIR TABLE database.table
esyap4oy2#
将所有文件放在hdfs文件夹中,并在其上创建外部表。如果文件具有.snappy这样的名称,hive将自动识别它们,不过您可以指定
TBLPROPERTIES ("orc.compress"="SNAPPY")
```CREATE EXTERNAL TABLE mydirectory_tbl(
id string,
name string
)
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
LOCATION '/mydir' --this is HDFS/S3 location
TBLPROPERTIES ("orc.compress"="SNAPPY")
;