2017-12-06 13 views
0

selectから複数の列を取得する方法? 例えば、私はこれで1列に得ることができます。spark-sqlでSELECT WHENを使用して複数の列を選択

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.*")) 

これを回避する方法はありますか?

答えて

1

あなたは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.*")) 
関連する問題