2013-07-08 40 views
0

如何在創建外部表時爲每個文件指定一個記錄。 我擁有的數據是這種格式。每個文件一行,並且該行的格式爲 compressed_bytebuffer(jackson.write(java pojo))Hive SerDe - 每個文件一個記錄用於外部表

那麼我們如何指定Hive應該將文件中的內容視爲一個Record並將其傳遞給SerDe 。 我看了一下JSonSerde的代碼,看起來好像我可以將整個Blob到我的SeDe serialize/deserialize方法,然後我只需解壓縮,剩下的JSonSerDe代碼就可以正常工作。關於這種方法是否有效的任何建議/想法?

回答

0

不是說你不能做到這一點,但你會反對Hadoop的穀物。不要把事情看作是1個文件到1個輸入。相反,用某種記錄分隔符(通常是\ n)加載所有輸入。然後讓Hadoop開車。

至於SerDe,Hive會根據源數據的分隔符來讀取記錄。這意味着blob將會(應該是)壓縮的JSON。因此,首先擴展JSON SerDe。首先你必須解壓縮它,然後把它交給JSON SerDe的超級用戶。

再一次,你覺得你要違背系統架構。讓Hive爲您管理壓縮。加載未壓縮的數據並讓子系統通過設置Snappy或LZO等來管理壓縮。這爲您提供了塊壓縮或再壓縮等選項。

相關問題