我正在嘗試加入兩個 apache spark sql DataFrame 并將第一個資料幀的列值替換為另一個。例如:
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 中做到這一點?
uj5u.com熱心網友回復:
您可以按如下方式構建所需的 3 列。
val df = df1.join(df2, Seq("col1"), "left").select(coalesce(df2("col3"), df1("col1")).as("col1"),col("col2"), col("colx"))
uj5u.com熱心網友回復:
為了在加入后從“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: _*)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/419712.html
標籤:
下一篇:scala減少一個復雜的結構
