본문 바로가기

스파크(SPARK)

스파크로 하이브(hive) SQL 사용하기(예제:emp 테이블)

예제 : 스파크에서 emp 테이블 생성하고 쿼리하기 

스파크 접속 (spark-shell)

(base) [oracle@centos ~]$ spark-shell
스파크 접속
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.0.2
      /_/

Using Scala version 2.11.8 (Java HotSpot(TM) Client VM, Java 1.7.0_60)
Type in expressions to have them evaluated.
Type :help for more information.

scala>

접속이 안될 때 해결방법 

spark 빠져나오기 

exit 

oracle에서 jps 확인

jps

sparksubmit (번호가 20046이면) 죽이기

kill -9 20046



이것도 안되면 reboot

1. hive sql을 스파크에서 사용하겠다고 지정(항상 해야한다!)

scala> val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)

 

2. emp 테이블 drop 하는 명령어(우선 실습을 위해 있는 테이블 drop 하기)

scala> sql("drop table emp")

 

3. emp 테이블 생성

scala> sqlContext.sql("""create  table  IF  NOT EXISTS  emp( empno int, ename  string,  
         job  string, mgr  int, hiredate string, sal  int,  comm  int,  deptno  int )  
         row format  delimited  fields  terminated  by  ','  
         lines  terminated  by  '\n' """)

더블 쿼테이션 마크 3개("""   """) 를 쓰면 여러줄로 작성해도 sql이 수행되므로 훨씬 간편하다

4. 생성한 emp 테이블에 oracle 계정에 있는 파일 로드 (데이터 로드)

  1) 우선 oracle 계정으로 가서 파일 있는지 확인

(base) [oracle@centos ~]$ ls -l emp.csv
-rw-rw-r--. 1 oracle oracle 613  9월 16 16:00 emp.csv

    2) 스칼라에서 oracle 에 있는 파일 로드 

       emp 테이블에 /home/oracle/emp.csv 데이터를 로드 하겠다 

scala> sqlContext.sql("LOAD DATA LOCAL INPATH '/home/oracle/emp.csv'  INTO  TABLE emp")
# emp 테이블에 /home/oracle/emp.csv 데이터를 로드 하겠다 


#출력 
res2: org.apache.spark.sql.DataFrame = []
#데이터 프레임 생성

5. emp 테이블 조회해보기 

scala> sql("select * from emp").show()
+-----+------+---------+----+----------+----+----+------+
|empno| ename|      job| mgr|  hiredate| sal|comm|deptno|
+-----+------+---------+----+----------+----+----+------+
| 7839|  KING|PRESIDENT|null|1981-11-17|5000|null|    10|
| 7698| BLAKE|  MANAGER|7839|1981-05-01|2850|null|    30|
| 7782| CLARK|  MANAGER|7839|1981-05-09|2450|null|    10|
| 7566| JONES|  MANAGER|7839|1981-04-01|2975|null|    20|
| 7654|MARTIN|      jjj|7698|1981-09-10|1250|1400|    30|
| 7499| ALLEN|      jjj|7698|1981-02-11|1600| 300|    30|
| 7844|TURNER|      jjj|7698|1981-08-21|1500|   0|    30|
| 7900| JAMES|    CLERK|7698|1981-12-11| 950|null|    30|
| 7521|  WARD|      jjj|7698|1981-02-23|1250| 500|    30|
| 7902|  FORD|  ANALYST|7566|1981-12-11|3000|null|    20|
| 7369| SMITH|    CLERK|7902|1980-12-09| 800|null|    20|
| 7788| SCOTT|  ANALYST|7566|1982-12-22|3000|null|    20|
| 7876| ADAMS|    CLERK|7788|1983-01-15|1100|null|    20|
| 7934|MILLER|    CLERK|7782|1982-01-11|1300|null|    10|
+-----+------+---------+----+----------+----+----+------+

이제 마음껏 sql 쿼리로 데이터를 출력하면 된다!