Select 多列 SELECT WHEN in spark-sql

Select multiple columns with SELECT WHEN in spark-sql

如何从 select 中获取多个列? 例如,我可以获得 1 列:

df1.alias("l")
.join(df2.alias("r"),Seq("id")) 
.select(when($"l.score" > $"r.score", $"l.name").otherwise($"r.name"))

但是假设我想要获取超过 1 列(或者甚至是数据框中的所有属性),我无法执行以下任何操作:

df1.alias("l")
.join(df2.alias("r"),Seq("id")) 
.select(when($"l.score" > $"r.score", Seq($"l.id",$"l.name")).otherwise(Seq($"r.id",$"r.name")))


df1.alias("l")
.join(df2.alias("r"),Seq("id")) 
.select(when($"l.score" > $"r.score", $"l.*").otherwise($"r.*"))

知道如何规避这个问题吗?

你可以return struct:

import org.apache.spark.sql.struct

when($"l.score" > $"r.score", struct($"l.name", $"l.score"))
  .otherwise(struct($"r.name", "r.score"))

或所有字段:

when($"l.score" > $"r.score", struct($"l.*"))
  .otherwise(struct($"r.*"))