如何在创建外部表时为每个文件指定一条记录。 我拥有的数据是这种格式。每个文件一行,行的格式是 compressed_ bytebuffer(jackson.write(java pojo))
那么我们如何指定Hive应该将文件中的内容视为一个Record并将其传递给我的SerDe。 我查看了JSonSerde的代码,看起来如果我可以将整个blob获取到我的SeDe序列化/反序列化方法,那么我只需要解压缩,其余的JSonSerDe代码将适用于我的情况。关于这种方法是否有效的任何建议/想法?
答案 0 :(得分:0)
不是说你不能这样做,但是你要反对Hadoop。不要将事物视为1文件到1输入。相反,使用某种记录分隔符(通常为\ n)加载所有输入。然后让Hadoop开车。
对于SerDe,Hive将根据源数据的分隔符读取记录。这意味着blob将是(应该是)压缩的JSON。首先,扩展JSON SerDe。首先你必须解压缩它,然后把它交给JSON SerDe的超级。
同样,你觉得你反对系统架构。让Hive为您管理压缩。加载未压缩的数据,让子系统通过设置Snappy或LZO之类的东西来管理压缩。这为您提供了块压缩或重新压缩等选项。