을 바탕으로 집계하고 피봇 팅 나는 불꽃불꽃 스칼라 - 시간주기
지금 현재로, 내가는 SqlContext을 사용하고 SQL 내에서 모든 변환을 적용하고있어에서 SQL 서버와 유사한 선회 구현하기 위해 노력했다. SQL Server에서 직접 끌어 오기를 수행하고 spark를 사용하여 피벗 펑션을 구현할 수 있는지 알고 싶습니다. | 다음은
내가create table #temp(ID Int, MonthPrior int, Amount float);
insert into #temp values (100,1,10),(100,2,20),(100,3,30),(100,4,10),(100,5,20),(100,6,60),(200,1,10),(200,2,20),(200,3,30),(300,4,10),(300,5,20),(300,6,60);
select * from #temp;
below- SQL Server 쿼리를 achieve- 노력하고있어의 예입니다 ID | MonthPrior | 금액 |
| ------- | ---------- | ------ |
| 100 | 1 | 10 |
| 100 | 2 | 20 |
| 100 | 3 | 30 |
| 100 | 4 | 10 |
| 100 | 5 | 20 |
| 100 | 6 | 60 |
| 200 | 1 | 10 |
| 200 | 2 | 20 |
| 200 | 3 | 30 |
| 300 | 4 | 10 |
| 300 | 5 | 20 |
| 300 | 6 | 60 |
Select ID,coalesce([1],0) as Amount1Mth, coalesce([1],0)+coalesce([2],0)+coalesce([3],0) as Amount1to3Mth, coalesce([1],0)+coalesce([2],0)+coalesce([3],0)+coalesce([4],0)+coalesce([5],0)+coalesce([6],0) as Amount_AllMonths from (select * from #temp) A pivot (sum(Amount) for MonthPrior in ([1],[2],[3],[4],[5],[6])) as Pvt
| ID | 금액 1Mth | Amount1to3Mth | Amount_AllMonths |
| ------- | ------- | ------- | --- |
| 100 | 10 | 60 | 150 |
| 200 | 10 | 60 | 60 |
| 300 | 0 | 0 | 90 |
감사합니다. @LeoC 이 접근 방식을 분석하겠습니다. 일하는 것 같아요. –
도움이 된 것을 기쁘게 생각합니다.문제가 해결되면 답변을 수락하여 질문을 마무리하십시오. –
(a : Seq [Int], b : Seq [Int]) => (zip b) .toMap에서 문제가 발생했습니다. 이 부분은 'UDF (col_1, col_2) '데이터 형식이 일치하지 않아서 해결할 수 없습니다. 인수 2에는 배열 형식이 필요하지만'col_2 '는 배열 형식입니다. ' udf에서 숫자/십진수를 사용하여 시도했습니다. 여전히 작동하지 않았습니다 –