比较pyspark中的两个数据集

问题描述 投票:1回答:1

我有2个数据集。

示例数据集1:

id     |   model |   first_name   |      last_name
-----------------------------------------------------------
1234   |   32    |    456765      |   [456700,987565]
-----------------------------------------------------------
4539   |   20    |    123211      |   [893456,123456]
-----------------------------------------------------------

有时first_name和last_name列之一为空。

示例数据集2:

number  |  matricule   | name       |    model
----------------------------------------------------------
AA      |  0009        |  456765    |     32
----------------------------------------------------------
AA      |  0009        |  893456    |     32
----------------------------------------------------------
AA      |  0009        |  456700    |     32
----------------------------------------------------------
AA      |  0008        |  456700    |     32
----------------------------------------------------------
AA      |  0008        |  987565    |     32

对于一个matricule,我们可以找到更多的namemodel,就像上面的示例一样。我应该做什么:

对于数据集1中的每一行,我采用3列:模型,first_name和last_name,并在数据集2中查找它们(如果存在/根据矩阵元素进行匹配。)>

我应该比较:

  • 按模型的模型==>如果模型(数据集1)在模型(数据集2)中存在==>匹配

  • 如果名字中存在名字==>,则没有匹配项。如果名字中不存在first_name ==>匹配

  • 如果last_name存在于名称==>匹配项中。当我有两个last_name值时,两者都应存在于要匹配的数据集2的名称中。

  • 示例:

来自数据集1的行1为:

id     |   model |   first_name   |      last_name
------------------------------------------------------
1234   |   32    |    456765      |   [456700,987565]

对于数据集2中的矩阵0009,我有:

number  |  matricule   | name       |    model
----------------------------------------------------------
AA      |  0009        |  456765    |     32
----------------------------------------------------------
AA      |  0009        |  893456    |     32
----------------------------------------------------------
AA      |  0009        |  456700    |     32

所以:

当矩阵= 0009 ==>不匹配时,数据集2的名称中存在[first_name(456765)]

姓,只存在456700 ==>没有匹配项

模型(32)在数据集2的模型中存在==>匹配

因此,我跳过了矩阵0009。并通过将数据集1中的第二行与矩阵0008的元素进行比较。

对于数据集2中的矩阵0008,我有:

----------------------------------------------------------
AA      |  0008        |  456700    |     32
----------------------------------------------------------
AA      |  0008        |  987565    |     32

始终处于数据集1的第一行:

当矩阵= 0008 ==>匹配时,数据集2的名称中不存在名字(456765)

last_name,当矩阵= 0008,==>匹配时,两个值都存在于数据集2的名称中

当矩阵= 0008 ==>匹配时,模型在数据集2的模型中存在

当我找到所有匹配项时,我将创建一个包含以下内容的新数据集:

number | id     |  matricule
-----------------------------------
AA     | 1234   | 0008
-----------------------------------

我希望我很清楚。有人可以帮助我。

我有2个数据集。示例数据集1:id |型号first_name |姓 - - - - - - - - - - - - - - - - - - - - - - - - - ---------- 1234 | 32 | 456765 | [456700,...

apache-spark pyspark pyspark-sql pyspark-dataframes
1个回答
0
投票

您可以在匹配的条件下使用join。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.