2013-02-28 69 views
3

我想在Pig中解析一個複雜的JSON字符串。具體來說,我希望Pig將我的JSON數組理解爲一個包而不是一個單獨的chararray。當使用JsonLoader時,我可以通過指定模式來輕鬆完成此操作,如this question。有什麼辦法可以讓Pig找出我的模式,或者當Pig解析一個字符串時指定它嗎?我一直在使用JsonStringToMap,但找不到指定Schema的方法,或者沒有正確理解我的JSON數組是一個數組而不是單個chararray。在Pig中解析複雜的JSON字符串

回答

4

我使用JsonTupleMap()結束了Mozilla's Akela library for pig。它通過解析我所有的JSON來完成我想要的東西,即使它非常複雜,甚至在我不提供模式時也會這樣做。如果你碰到和我一樣的問題,請使用它。

用法示例:

REGISTER '/path/to/akela-0.5-SNAPSHOT.jar'; 
DEFINE JsonTupleMap com.mozilla.pig.eval.json.JsonTupleMap(); 
loaded = LOAD '$INPUT' AS (json_string:chararray, ...); 
jsonified = FOREACH loaded GENERATE JsonTupleMap(json_string) AS json:map[], ...; 
some_generate = FOREACH jsonified GENERATE json#'key'#'sub_key'; 
+0

你知道我在哪裏可以找到編譯jar文件? – 2014-06-13 16:12:34

+0

@FabrizioRegini上面的鏈接中有說明用於使用Maven編譯jar。這很容易。你需要編譯你的特定系統。 – Eli 2014-06-13 22:18:23

+0

我在編譯elephant-birds時遇到了問題,有人向我指出了jar文件的下載。這就是我問的原因。 – 2014-06-16 06:28:47