我从这里读了一篇关于使用 apache graphx 处理分层数据的文章。我想进一步探讨这个解决方案。
概述
最近在我的工作中, 我需要使用图形创建一个解决方案, 以创建公司员工之间关系的层次结构。这是一个简单的问题, 但我从来没有这样做在大数据区域使用apache graphx。
在这种情况下, 我们使用的是 cloudera 的群集环境 (商业许可), 但该解决方案对于开源版本的工作方式相同。
对于对 cloudera 解决方案感兴趣的任何人, 您可以下载配置了群集并准备使用的虚拟机。
1. 问题
我们需要接收群集的关系 oracle 数据库中的员工数据, 进行一些数据处理, 并将其保存在 hive 中。但我们没有在员工级别之间创建层次结构的关系, 因此我们使用了一个带有辅助数据的表, 并创建了一个自上而下的图形来显示这些关系。
详细内容:关系数据库 (如 oracle) 具有与层次结构配合使用的connect by 函数。
下面我做了一个假设的设计的员工层次结构, 有9个级别:
graphx (pregel) 有两种类型的图形: 自上而下和自下而上。
1.1 开始
在对数据进行了几次转换后, 我们得出了一个类似于以下对象的数据框架:
水平仪 | 角色扮演 | 公司名称 | 通过 |
---|---|---|---|
1 | 总统 | 蒂姆·考克斯 | 空 |
2 | Vp | 罗伯特·沃森 | 1 |
3个 | Vp | 马修·鲍尔斯 | 1 |
4个 | Vp | 亚历克斯·佩斯 | 1 |
5 | 导演 | 若昂·巴斯托斯 | 2 |
6 | 导演 | 马丁·杰伊 | 3个 |
7。 | 主管 | 安娜·贝克尔 | 5 |
8 | 主管 | 马科斯·西尔韦里奥 | 6 |
9 | 经理 | 卡洛斯·克劳斯 | 8 |
10 | 分析师 | 雅各布·奥利弗 | 9 |
11 | 分析师 | 查理·诺亚 | 9 |
12 | 分析师 | 克劳迪奥·斯特沃特 | 9 |
13 | 资深开发人员 | 杰克·康纳 | 10 |
14 | 资深开发人员 | 丹尼尔·梅森 | 10 |
15 | 初级开发人员 | 乔治·里斯 | 13 |
但这只是我们测试的一个例子, 使用层次结构上方的关系图。包含null的数据被认为是关系的根源, 这意味着, 在这种情况下, 将是公司的总裁或首席执行官。
1.2 分析结果
使用上述测试数据创建数据框架:
val empDF = sparkSession
并行 (数组 (“1″、”tim cox”、”主席”、null. asinst符 of [string]), (“2”, “robert watson”, “vp”, “1”), (“3”, “matthew images”, “matthew images”, “vp”, “1”), (“4”, “alex pess”, “vp”, “1”), (“5”, “joao bastos”, “董事”, “2”), (“6”, “martin jay”, “diector”, “3”),
(“7″、”anna becker”、”监督”、”5”)、(“8″、”marcos silverio”、”监督”、”6”)、(“9″、”carlos klaus”、”carlos klaus”) 经理 “,” 8 “), (” 10 “,” 雅各奥利弗 “,” 分析 “,” 9 “), (” 11 “,” 查理诺亚 “,” 分析 “,” 9 “), (” 12 “,” claudio stwart “,” 分析 “,” 9 “), (” 13 “,” 13 “,”杰克·康纳 “,” 高级开发者 “,” 10 “)、(” 14 “、” daniel mason “、” 高级开发人员 “、” 10 “)、(” 15 “、” george reece “、” 联合开发者 “、” 13 “)). todf (” id “、” name “、” 角色 “、” id _ connect “by”)
在图表中运行该数据框架后, 您将得到以下结果:
+---+---------------+----------------+-------------+-----+-------+-----------------------------------------------------------------------------------------------------+--------+------+
|id |name |role |id_connect_by|level|root |path |iscyclic|isleaf|
+---+---------------+----------------+-------------+-----+-------+-----------------------------------------------------------------------------------------------------+--------+------+
|1 |Tim Cox |PRESIDENT |null |1 |Tim Cox|/Tim Cox |0 |0 |
|4 |Alex Pess |VP |1 |2 |Tim Cox|/Tim Cox/Alex Pess |0 |1 |
|2 |Robert Watson |VP |1 |2 |Tim Cox|/Tim Cox/Robert Watson |0 |0 |
|3 |Matthew Powers |VP |1 |2 |Tim Cox|/Tim Cox/Matthew Powers |0 |0 |
|5 |Joao Bastos |DIRECTOR |2 |3 |Tim Cox|/Tim Cox/Robert Watson/Joao Bastos |0 |0 |
|6 |Martin Jay |DIRECTOR |3 |3 |Tim Cox|/Tim Cox/Matthew Powers/Martin Jay |0 |0 |
|7 |Anna Becker |SUPERVISOR |5 |4 |Tim Cox|/Tim Cox/Robert Watson/Joao Bastos/Anna Becker |0 |1 |
|8 |Marcos Silverio|SUPERVISOR |6 |4 |Tim Cox|/Tim Cox/Matthew Powers/Martin Jay/Marcos Silverio |0 |0 |
|9 |Carlos Klaus |MANAGER |8 |5 |Tim Cox|/Tim Cox/Matthew Powers/Martin Jay/Marcos Silverio/Carlos Klaus |0 |0 |
|11 |Charlie Noah |ANALYST |9 |6 |Tim Cox|/Tim Cox/Matthew Powers/Martin Jay/Marcos Silverio/Carlos Klaus/Charlie Noah |0 |1 |
|12 |Claudio Stwart |ANALYST |9 |6 |Tim Cox|/Tim Cox/Matthew Powers/Martin Jay/Marcos Silverio/Carlos Klaus/Claudio Stwart |0 |1 |
|10 |Jacob Oliver |ANALYST |9 |6 |Tim Cox|/Tim Cox/Matthew Powers/Martin Jay/Marcos Silverio/Carlos Klaus/Jacob Oliver |0 |0 |
|14 |Daniel Mason |SENIOR DEVELOPER|10 |7 |Tim Cox|/Tim Cox/Matthew Powers/Martin Jay/Marcos Silverio/Carlos Klaus/Jacob Oliver/Daniel Mason |0 |1 |
|13 |Jack Connor |SENIOR DEVELOPER|10 |7 |Tim Cox|/Tim Cox/Matthew Powers/Martin Jay/Marcos Silverio/Carlos Klaus/Jacob Oliver/Jack Connor |0 |0 |
|15 |George Reece |JUNIOR DEVELOPER|13 |8 |Tim Cox|/Tim Cox/Matthew Powers/Martin Jay/Marcos Silverio/Carlos Klaus/Jacob Oliver/Jack Connor/George Reece|0 |1 |
+---+---------------+----------------+-------------+-----+-------+-----------------------------------------------------------------------------------------------------+--------+------+
让我们了解结果:
专业领域 | 产品说明 |
---|---|
Id | 标识符或员工的注册的编号 |
1.3 代码
要执行更多测试, 请下载存储库中的代码:
git clone https://github.com/edersoncorbari/scala-lab.git
在项目的自述文件中, 您可以找到有关如何运行和测试的提示。
1.4 参考资料
以下是一些需要记忆和学习的参考资料:
- 麻省理工学院计算机科学课程关于图论的讲座
- https://spark.apache.org/graphx/
- https://dzone.com/articles/processing-hierarchical-data-using-spark-graphx-pr
- 火花图形在行动
- https://edersoncorbari.github.io/tutorials/scala-spark-graph/
谢谢!