apache-spark - Pyspark - 查找在过去项目中一起工作的员工
问题描述
我试图找出每个项目有多少工人以前在其他不同的项目中一起工作。所以可以说这是数据:
heroes_data = [
('Deadpool', 3,"UNO",'2021-09-18 00:00:00'),
('Iron man', 1,"DOS",'2021-08-18 00:00:00'),
('Groot', 2,"UNO",'2021-09-18 00:00:00'),
('Cap', 4,"UNO",'2021-04-18 00:00:00'),
('Wol', 5,"UNO",'2021-05-18 00:00:00'),
('Hulk', 6,"UNO",'2021-03-18 00:00:00'),
('Black', 7,"DOS",'2021-09-18 00:00:00'),
('Pika', 8,"UNO",'2021-07-18 00:00:00'),
('Hawk', 10,"UNO",'2021-04-18 00:00:00'),
('Wanda', 11,"DOS",'2021-01-18 00:00:00'),
('Falcon', 12,"UNO",'2021-03-18 00:00:00'),
('Rocket', 13,"DOS",'2021-08-18 00:00:00'),
]
heroes = spark.createDataFrame(heroes_data, ['name', 'id','project','project_end_date'])
最终输出应该是 2 列,项目名称和过去一起工作的工人数量。
所以我做了以下事情:
step 1:- Find all employee working on a project
+-------------+--------------------+
| prj_projnum| emp |
+-------------+--------------------+
| A |A
| A |B
| A |C
+-------------+--------------------+
step 2 :- Create all possible relation combination of the employees (crossJoin)
| prj_projnum| emp1 |emp2|
+-------------+--------------------+
| A |A |B
| A |A |C
| A |B |C
+-------------+--------------------+
+-------------+--------------------+
| prj_projnum| listof_relation|
+-------------+--------------------+
|A | [A,B],[A,C],[B,C] |
+-------------+--------------------+
但是我的系统在进行交叉连接时完全崩溃了,因为数据集是 334k 行,所以生成的交叉连接是数千万行,所以我的问题是,有没有更有效的方法来解决这个问题?
预先感谢您的回答。
解决方案
推荐阅读
- html - netsuite 将补货数量添加到发票高级 pdf 模板
- c++ - 为什么使用运算符<比较两个数组元素时会出错,即使我已经重载了运算符
- 不断发生的错误:
- '[' 标记之前的预期主表达式
- '[' 标记之前的预期主表达式
void selectionSort(Blog blog[], int numBlogs) { Blog temp; int minIndex=0; for (int i=0;
- networking - 一体机 Openstack 实例网络无法与 LAN 网络通信 - 外部虚拟机 ping 正常 - 虚拟机外部/互联网 ping 不正常
- c# - 在 .NET Core 通用主机中配置应用程序配置时访问记录器
- neo4j - 我怎么能用两次“线”?
- delphi - 在 Delphi 中显示打开或保存对话框之前需要一个事件
- flutter - 当我在 Dart 中创建一个 Stream 但没有关闭它时发生了什么
- java - 如何从解析中删除一行并更新当前用户的自定义列表视图?
- powershell - 如何使用 Powershell 检查具有多个扩展名的文件?
- reactjs - 在反应中将字符串与html元素连接起来