在 PySpark 中,如何根据另一个 DataFrame 中的查找来填充新列?

Spark 和 PySpark 的新手,我试图通过在另一个 DataFrame 中查找信息来在 DataFrame 中添加一个字段/列。在过去的几个小时里,我一直在尝试阅读 RDD、DataFrame、DataSet、map、join 等,但这些概念对我来说仍然是新的,我仍然很难完全理解它们。


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


+----+-------------+

| ID | Role        |

+----+-------------+

|  1 | Author      |

|  1 | Editor      |

|  2 | Author      |

|  2 | Publisher   |

|  3 | Editor      |

|  3 | Assistant   |

+----+-------------+

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


+----+-------------+

| ID | Name        |

+----+-------------+

|  1 | John Smith  |

|  2 | John Doe    |

|  3 | Bob Jim Bob |

+----+-------------+

我需要以某种方式将此数据合并到单个输出 DataFrame 中,并添加 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 表中查找 Name 但这真的很慢,我肯定无法利用火花。


再说一次,对这一切仍然很陌生,所以如果这是一个非常明显的问题,请原谅我。


梵蒂冈之花
浏览 211回答 1
1回答

九州编程

您可以在 pySpark 中合并两个 dataframeS,如下所示:>>> 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|+---+-----------+---------+注意:我假设"ID"为外键,如有任何疑问,请发表评论。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python