scala - 使用来自另一个 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
似乎并不适合这种情况。
解决方案
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|
+---+----+----+-------+
推荐阅读
- javascript - 将动态创建的列表项 ID 绑定到 jQuery 插件
- sas - 在sas中将多条记录压缩为一条记录
- go - 动态编程 - 带有记忆的树递归
- google-apps-script - 图片功能不生成二维码。如何从二维码生成url中获取数据?
- kubernetes - 可以在 OpenShift 服务中同时包含 alpha 和 beta 注释吗?
- kubernetes - 如何将从 .txt 创建的 configmap 添加到 pod?
- java - Java Swing actionPerformed() 跳过可视化
- python - 如何在 django 过滤器中编辑字段名称,并添加样式
- java - 在 HiDPI 屏幕上的 IntelliJ Idea Community 中运行 Swing 应用程序
- python - 异常值:类型字符变化的值太长(2)