我有两个表,一个是值,另一个是查找值。我想用表2中的值替换表1,但是没有找到一种优雅的方法。
表1(主要)
name age country last_visited
x1 a1 UK 2016
x2 a3 US 2017
x3 a1 China 2015
表2(查询)
code value date_updated
x1 Dom 2017
a1 25 2017
x2 Peter 2017
x3 Alice 2017
a3 26 2017
决赛桌(我想要的)
name age country last_visited
Dom 25 UK 2016
Peter 26 US 2017
Alice 25 China 2015
我已经尝试将表1连接到表2但是后来这涉及我更换/删除列,我必须为每个列单独执行此操作。我只提供了一小部分列,其中我有上面的查找值,但实际上我有大约8列在同一个表中包含查找值。我如何实现这一目标?
val unsanitised_data = table1.join(table2, table1.col("name") === table2.col("code"), "left").drop("last_visited", "name", "code")
现在我需要重命名"价值"为年龄和其他专栏命名和做同样的事情。这是最好的方法吗?
答案 0 :(得分:3)
简单的join
和select
函数可以解决您的问题
df1.join(df2, df1("name")=== df2("code"), "left").select($"value".as("name"), $"age", $"country", $"last_visited")
.join(df2,df1("age")=== df2("code"), "left").select($"name", $"value".as("age"), $"country", $"last_visited")
.show(false)
<强>被修改强>
如果您有太多columns
并且不需要第二张表的列,那么您可以
df1.join(df2, df1("name")=== df2("code"), "left").withColumn("name", col("value")).drop(df2.columns: _*)
.join(df2,df1("age")=== df2("code"), "left").withColumn("age", col("value")).drop(df2.columns: _*)
.show(false)