在PySpark中,如何基于另一个数据帧中的查找填充新列?

2024-05-16 10:33:15 发布

您现在位置:Python中文网/ 问答频道 /正文

对于Spark和PySpark来说是个新手,我试图通过在另一个数据帧中查找信息来在数据帧中添加一个字段/列。在过去的几个小时里,我一直在努力阅读RDD、数据帧、数据集、映射、连接等,但这些概念对我来说仍然是新的,我仍然很难弄清楚它们的头绪。你知道吗

例如,给定以下带有ID和角色的输入数据帧:

+----+-------------+
| ID | Role        |
+----+-------------+
|  1 | Author      |
|  1 | Editor      |
|  2 | Author      |
|  2 | Publisher   |
|  3 | Editor      |
|  3 | Assistant   |
+----+-------------+

另一个输入数据帧具有唯一的ID和名称映射:

+----+-------------+
| ID | Name        |
+----+-------------+
|  1 | John Smith  |
|  2 | John Doe    |
|  3 | Bob Jim Bob |
+----+-------------+

我需要以某种方式将这些数据合并到一个单独的输出数据框中,并添加Name列,如下所示:

+----+-------------+-------------+
| ID | Name        | Role        |
+----+-------------+-------------+
|  1 | John Smith  | Author      |
|  1 | John Smith  | Editor      |
|  2 | John Doe    | Author      |
|  2 | John Doe    | Publisher   |
|  3 | Bob Jim Bob | Editor      |
|  3 | Bob Jim Bob | Assistant   |
+----+-------------+-------------+

两个输入表的实际数据量大约为200k+行。你知道吗

我最初的想法是在ID+Role表中添加一个新的Name列,然后遍历每一行并从ID+Name表中手动查找名称,但这确实很慢,而且我肯定无法充分利用Spark的优势。你知道吗

再次重申,这一切仍然是新的,所以请原谅我,如果这是一个非常明显的问题。你知道吗

谢谢你!你知道吗


Tags: 数据name名称idjohneditorpublisherspark
1条回答
网友
1楼 · 发布于 2024-05-16 10:33:15

您可以在pySpark中合并两个数据帧,如下所示:

>>> df1.show()
+ -+    -+
| ID|     Role|
+ -+    -+
|  1|   Author|
|  1|   Editor|
|  2|   Author|
|  2|Publisher|
|  3|   Editor|
|  3|Assistant|
+ -+    -+

>>> df2.show()
+ -+     -+
| ID|       Name|
+ -+     -+
|  1| John Smith|
|  2|   John Doe|
|  3|Bob Jim Bob|
+ -+     -+

>>> df3 = df2.join(df1,"ID")
>>> df3.show()
+ -+     -+    -+
| ID|       Name|     Role|
+ -+     -+    -+
|  1| John Smith|   Author|
|  1| John Smith|   Editor|
|  2|   John Doe|   Author|
|  2|   John Doe|Publisher|
|  3|Bob Jim Bob|   Editor|
|  3|Bob Jim Bob|Assistant|
+ -+     -+    -+

Note: I am assuming "ID" as foreign Key, Please let comment out in case any concerns.

相关问题 更多 >