如何从选择中获取多个列?例如,我可以得到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.*"))
任何想法如何绕过这个?
您可以返回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.*"))