繁体   English   中英

加入 dataframe 并替换 scala 中的列值

[英]Joining dataframe and replacing column value in scala

我正在尝试加入两个 apache spark sql DataFrame 并用另一个 Z6A8064B5DF479450550DZ77553C4 替换第一个列值。 例如:

Df1:

col1 | col2  |  other columns .... say (col-x, col-y, col-z)
------------ |--------------------------------
x    |  a    |random values
y    |  b    |random values
z    |  c    |random values

Df2:

col1 | col3  | other columns .. say (col-a, col-b, col-c)
-------------|--------------------------------
x    |  a1   |different random values
y    |  b1   |different random values
w    |  w1   |different random values

resultant dataframe should be

DF:

col1 | col2  | other columns of DF1 (col-x. col-y, col-z)
-------------|-------------------------------
a1   |  a    |random values
b1   |  b    |random values
z    |  c    |random values

我需要执行左连接并将 DF1.col1 的值替换为 DF2.col3,只要 DF1.col1 = DF2.col1。 我不知道该怎么做。 此外,从上面的示例中可以看出,DF1 除了“col1”和“col2”之外还有更多的列,我不能在所有列上应用 select。 我正在尝试类似的东西,

val df = df1.join(df2, Seq("col1"), "left").select(
  coalesce(df2("col2"), df1("col1")).as("col1")
)

但这似乎不起作用。 另外,我认为它会过滤掉 DF1 的其他列。 我想保留 DF1 的所有列。

如何在 Scala 中执行此操作?

您可以按如下方式构建所需的 3 列。

val df = df1.join(df2, Seq("col1"), "left").select(coalesce(df2("col3"), df1("col1")).as("col1"),col("col2"), col("colx"))

加入后从“df1”获取所有列,别名可用于Dataframe:

val updatedCol1 = coalesce(df2("col3"), df1("col1")).alias("col1")
val columns = updatedCol1 :: df1.columns
  .filterNot(_ == "col1")
  .map(cname => col("df1." + cname))
  .toList

df1.alias("df1")
  .join(df2, Seq("col1"), "left")
  .select(columns: _*)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM