首页 > 解决方案 > 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 行,所以生成的交叉连接是数千万行,所以我的问题是,有没有更有效的方法来解决这个问题?

预先感谢您的回答。

标签: apache-sparkpysparkapache-spark-sql

解决方案


推荐阅读