如何从Hadoop MR中的非结构化数据生成JSON对象?

时间:2014-12-03 07:49:54

标签: java json hadoop mapreduce apache-pig

我的数据集为
父母,子女
------------
A,B
A,C
B,d
B,E
C,F
C,G
G,H
G,I
P,Q
P,R
Q,S
Q,T
那个我想转换成JSON对象。我想做但不知道正确的做法。所以我只是创建一个可能有助于解决它的数据集的树结构。你能否告诉我如何做到这一点?
enter image description here
我面临问题,如何识别父节点。如果图像中有两棵树。请建议我怎么做。

这个的输出应该是

{
    a:{
            b: {d,e},
            c: { g: {h,i}, f }
        },
    p:{     q:{s,t}, r }
}

1 个答案:

答案 0 :(得分:0)

首先,我开始寻找所有根源。这可以通过使用一些现有模块从输入对构建树结构来完成(我不知道哪一个......),但这可以更简单地完成。如果你创建了两个集合:一个包含所有父项,另一个包含所有子项,然后从子项中减去父项 - 您将获得根。

然后,从root开始,你可以构建字典,然后将其转换为JSON(对不起,我不擅长java,所以用伪代码写这个。)

for r in roots:
    ## init dictionary key with value = dictionary or Null  
    dict[r] = build_tree(r, pairs)

所以,显然, build_tree()应该是字典的递归更新,在每个阶段你创建一个新的字典,其中的键是输入父元素的子元素,值等于 build_tree(如果找不到更多的孩子,则为空。 当然,在最后一个阶段,应该有将字典保存为JSON的方法。

注意:上面假设你没有圆圈,但如果你有 - 你需要更复杂的算法,并对你如何停止递归和做某些"参考圆的开头。