Spark和Scala,通过映射公用键添加具有来自另一个数据帧的值的新列[重复]

Posted

技术标签:

【中文标题】Spark和Scala,通过映射公用键添加具有来自另一个数据帧的值的新列[重复]【英文标题】:Spark and Scala, add new column with value from another dataframe by mapping common key [duplicate] 【发布时间】:2018-02-21 09:33:50 【问题描述】:

我有 2 个数据框。 df1 =

dep-code    rank
    abc        1
    bcd        2

df2 =

some cols...  dep-code 
                  abc
                  bcd
                  abc

我想将新列添加到 df2 作为 df1.dep-code = df2.dep-code 的排名

结果 -

some cols...   dep-code   rank
                  abc       1
                  bcd       2
                  abc       1

【问题讨论】:

只要做df2.join(df1, Seq("dep-code"), "left") 就可以了。但是下次在你提问之前,先做一些研究,因为关于如何做到这一点有很多问题和答案 【参考方案1】:

这是一个简单的连接:

df2.join(df1, "dep-code")

具有以下输入:

df1 与连接和所需的列:

+--------+----+
|dep-code|rank|
+--------+----+
|     abc|   1|
|     bcd|   2|
+--------+----+

带有连接列的df2加上一个额外的(aColumn):

+----------+--------+
|   aColumn|dep-code|
+----------+--------+
|      some|     abc|
| someother|     bcd|
|yetAnother|     abc|
+----------+--------+

您将检索以下输出:

+--------+----------+----+
|dep-code|   aColumn|rank|
+--------+----------+----+
|     abc|      some|   1|
|     abc|yetAnother|   1|
|     bcd| someother|   2|
+--------+----------+----+

【讨论】:

如果 dep-code 不匹配,这将从 df2 中删除行。 对,op 说他想要 df1.dep-code = df2.dep-code 时的结果。所以我假设它想要一个完整的连接,而不是一个左连接。

以上是关于Spark和Scala,通过映射公用键添加具有来自另一个数据帧的值的新列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 spark 和 scala 中,如何将数据框转换或映射到特定列信息?

来自 RDD 映射的 Spark Scala 序列化错误

Scala Spark 地图类型匹配问题

无法使用 Spark/Scala 从 JSON 嵌套键值对创建列和值

如何使用 Scala Case Class 在 Spark Structured Streaming 中映射 Kafka 源

通过读取具有不同数据类型的 Scala 序列来创建 Spark 数据帧