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

标签 java json hadoop mapreduce apache-pig

我有一个数据集
parent , child
--------------
一、二
一、三
b,d
b,e
c,f
c,g
g,h
克,我
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 }
}

最佳答案

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

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

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

因此,很明显,build_tree() 应该是字典的递归更新,在每个阶段您创建一个新字典,其键是输入父项的子项,值等于 build_tree( )Null 如果找不到更多的 child 。 在最后阶段,当然应该有将字典保存为JSON的方法。

注意:上面假设你没有圆圈,但如果你有 - 你需要更复杂的算法并对你如何做一些假设,例如,停止递归并对圆圈的开头进行“某种”引用.

关于java - 如何从 Hadoop MR 中的非结构化数据生成 JSON 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27266296/

相关文章:

java - 从 user_master 中选择不同的 u.id, u.first_name + ' ' + u.last_name , u.company_name u 给出错误的结果

java扩展泛型类型不明确的方法调用

json - 无法使用 vuejs 3 读取 null 的属性 'title'

java - 在 shell 中将星号转义为 Java 命令行参数

Java导入不公开的自定义类

ASP.NET WebAPI 与 MVC 在参数的 json(反)序列化方面存在细微的行为偏差

php - 如何从 MYSQL 正确编码 JSON,为 Highcharts 做好准备

hadoop - hadoop-无法运行没有格式的namenode

hadoop - Sqoop append命令如何在hadoop中工作

hadoop - 运行Mahout recomendItembased算法时出错