首页 > 解决方案 > 使用来自另一个 df 的信息创建新列

问题描述

我正在尝试根据另一个数据表中的信息创建一个新列。

df1

Loc Time   Wage
1    192    1
3    192    2
1    193    3
5    193    3
7    193    5
2    194    7

df2

Loc  City
1    NYC
2    Miami
3    LA
4    Chicago
5    Houston
6    SF
7    DC

所需的输出:

Loc Time   Wage  City
1    192    1    NYC
3    192    2    LA
1    193    3    NYC
5    193    3    Houston
7    193    5    DC
2    194    7    Miami

实际的数据帧在行数方面差异很大,但大致如此。我认为这可能是可以实现的,.map但我还没有在网上找到太多的文档。join似乎并不适合这种情况。

标签: scala

解决方案


join正是您所需要的。尝试在spark-shell

val sparkSession = SparkSession.builder().appName("my_app").getOrCreate()
import spark.implicits._

val col1 = Seq("loc", "time", "wage")
val data1 = Seq((1, 192, 1), (3, 193, 2), (1, 193, 3), (5, 193, 3), (7, 193, 5), (2, 194, 7))
val col2 = Seq("loc", "city")
val data2 = Seq((1, "NYC"), (2, "Miami"), (3, "LA"), (4, "Chicago"), (5, "Houston"), (6, "SF"), (7, "DC"))

val df1 = spark.sparkContext.parallelize(data1).toDF(col1: _*)
val df2 = spark.sparkContext.parallelize(data2).toDF(col2: _*)

val outputDf = df1.join(df2, Seq("loc"))  // join on the column "loc"

outputDf.show()

这将输出

+---+----+----+-------+
|loc|time|wage|   city|
+---+----+----+-------+
|  1| 192|   1|    NYC|
|  1| 193|   3|    NYC|
|  2| 194|   7|  Miami|
|  3| 193|   2|     LA|
|  5| 193|   3|Houston|
|  7| 193|   5|     DC|
+---+----+----+-------+

推荐阅读