2017-12-06 10 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을 반환 할 수 있습니다 :

when($"l.score" > $"r.score", struct($"l.*")) 
    .otherwise(struct($"r.*")) 
:
import org.apache.spark.sql.struct 

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

또는 모든 필드에