문제 1. 부서번호가 30번인 사원들의 이름, 월급, 부서번호를 출력하시오
# sqlContext.sql 도 가능하지만 그냥 편하게 sql로 하기
scala> sql("""select ename, sal, deptno
| from emp
| where deptno=30""").show()
+------+----+------+
| ename| sal|deptno|
+------+----+------+
| BLAKE|2850| 30|
|MARTIN|1250| 30|
| ALLEN|1600| 30|
|TURNER|1500| 30|
| JAMES| 950| 30|
| WARD|1250| 30|
+------+----+------+
문제 2. 직업과 직업별 토탈월급을 출력하는데 HAVING 절을 이용해서 직업별 토탈월급이 5000 이상인 것만 출력하시오
# oracle 과는 다르게 having 절에 컬럼별칭 사용해서 조건을 줄 수 있다.
scala> sql("""select job, sum(sal) as sumsal
| from emp
| group by job
| having sumsal >= 5000 """ ).show()
+---------+------+
| job|sumsal|
+---------+------+
| ANALYST| 6000|
| jjj| 5600|
| MANAGER| 8275|
|PRESIDENT| 5000|
+---------+------+
문제 3. 이름, 월급에 대한 순위를 출력하시오
scala> sql("""select ename,sal,rank () over(order by sal desc) as rnk
| from emp""").show()
22/09/19 16:12:12 WARN WindowExec: No Partition Defined for Window operation! Moving all data to a single partition, this can cause serious performance degradation.
+------+----+---+
| ename| sal|rnk|
+------+----+---+
| KING|5000| 1|
| FORD|3000| 2|
| SCOTT|3000| 2|
| JONES|2975| 4|
| BLAKE|2850| 5|
| CLARK|2450| 6|
| ALLEN|1600| 7|
|TURNER|1500| 8|
|MILLER|1300| 9|
|MARTIN|1250| 10|
| WARD|1250| 10|
| ADAMS|1100| 12|
| JAMES| 950| 13|
| SMITH| 800| 14|
+------+----+---+
경고 메세지 나옴
WARN WindowExec: No Partition Defined for Window operation! Moving all data to a single partition, this can cause serious performance degradation.
위의 경고 메세지는 진짜 대용량 데이터를 조회하는 것으로 간주하고 쿼리를 수행하는 것이므로
성능을 좋게하기 위해서는 partition by 를 사용해라! 라고 권장하는 것
문제 4. 부서번호, 이름, 월급, 월급에 대한 순위를 출력하는데 부서번호별로 월급이 많은 순서대로 순위를 출력해보자
scala> sql(""" select deptno,ename,sal
| ,rank() over(partition by deptno order by sal desc) as rnk
| from emp""" ).show()
+------+------+----+---+
|deptno| ename| sal|rnk|
+------+------+----+---+
| 20| FORD|3000| 1|
| 20| SCOTT|3000| 1|
| 20| JONES|2975| 3|
| 20| ADAMS|1100| 4|
| 20| SMITH| 800| 5|
| 10| KING|5000| 1|
| 10| CLARK|2450| 2|
| 10|MILLER|1300| 3|
| 30| BLAKE|2850| 1|
| 30| ALLEN|1600| 2|
| 30|TURNER|1500| 3|
| 30|MARTIN|1250| 4|
| 30| WARD|1250| 4|
| 30| JAMES| 950| 6|
+------+------+----+---+
'스파크(SPARK)' 카테고리의 다른 글
스파크 출력 결과 csv 파일 저장하기 (1) | 2022.09.21 |
---|---|
스파크로 WHERE 절 서브쿼리 문제 풀기 (0) | 2022.09.21 |
스파크로 하이브(hive) SQL 사용하기(예제:emp 테이블) (0) | 2022.09.20 |
스파크에서 작업이 안되고 계속 에러가 날 때 조치 방법 (0) | 2022.09.20 |
스파크(SPARK) 접속하여 HIVE SQL 사용하기(시작 단계) (0) | 2022.09.20 |