2017-03-15 4 views
1

Spark을 사용하여 스칼라에서 DataFrame에있는 서로 다른 (문자열 및 숫자) 유형의 열에 대해 최대 값을 얻으려면 어떻게해야합니까?Spark 그룹의 여러 열에 대한 데이터 프레임

+----+-----+-------+------+ 
|name|value1|value2|string| 
+----+-----+-------+------+ 
| A| 7|  10| "a"| 
| B| 4|  6| "b"| 
+----+-----+-------+------+ 

apply(max,axis=0)와 팬더처럼 함수가 아니면 내가 UDF를 작성해야합니까 :

하자 그게 내 데이터

+----+-----+-------+------+ 
|name|value1|value2|string| 
+----+-----+-------+------+ 
| A| 7|  9| "a"| 
| A| 1|  10| null| 
| B| 4|  4| "b"| 
| B| 3|  6| null| 
+----+-----+-------+------+ 

하고 원하는 결과가라고?

내가 할 수있는 것은 df.groupBy("name").max("value1")이지만 두 행을 수행 할 수 있습니다. max 행에 Sequence이 작동하지 않습니다. max() 기능에서 작동합니다.

아이디어를 빨리 해결할 수 있습니까?

답변

2

사용이

df.groupBy("name").agg(max("value1"), max("value2")) 
+0

내가 모든 열을 하드 코딩 할 필요가 없습니다 수있는 방법도 있나요? 모든 열을 통과하는 루프처럼? 'for (col <- df.columns) {df = df.groupBy ("name"). max (col)}'또는 이와 비슷한 것? 번거로운 30 열을 잘못 처리했습니다. –

+0

아, 그리고 그런데 : 물론 콜론 문자열의 문자열 선택은 해당 솔루션에서 고려되지 않습니다. –

+0

'max()'도'agg'의 문자열에서 작동합니다. 하지만 알파벳순으로 최대 값을 취하므로 이름을 'null'로 변경하는 것이 좋습니다. –

관련 문제