如何加载在HIVE中压缩的json snappy

如何解决如何加载在HIVE中压缩的json snappy

我在HDFS中有一堆json快照压缩文件。 它们是HADOOP快速压缩的(不是python,请参阅其他SO问题) 并具有嵌套结构。

找不到将它们加载到其中的方法 进入HIVE(使用json_tuple)?

我可以获取一些有关如何加载它们的资源/提示

以前的参考文献(没有有效的答案)

pyspark how to load compressed snappy file

Hive: parsing JSON

解决方法

  1. 将所有文件放在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")
;
  1. JSONSerDe可以解析所有复杂的结构,比使用json_tuple容易得多。 json中的简单属性按原样映射到列。方括号中的所有内容[]是一个数组,在{}中是struct 或map ,可以嵌套复杂类型。仔细阅读自述文件:https://github.com/rcongiu/Hive-JSON-Serde。其中有一个关于嵌套结构的部分,以及有关CREATE TABLE的许多示例。

  2. 如果您仍然想使用json_tuple,则创建具有单个STRING列的表,然后使用json_tuple进行解析。但这要困难得多。

  3. 所有JSON记录都应位于单行中(JSON对象中以及\ r中都不应包含换行符)。这里https://github.com/rcongiu/Hive-JSON-Serde

,

如果您的数据已分区(例如按日期)

在Hive中创建表

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?