복붙노트

[HADOOP] Spark Scala를 사용하여 HiveContext를 사용하여 Hive 테이블에 데이터 삽입

HADOOP

Spark Scala를 사용하여 HiveContext를 사용하여 Hive 테이블에 데이터 삽입

아래와 같이 HiveContext를 사용하여 스파크 코드에서 Hive 테이블에 데이터를 삽입 할 수있었습니다.

   val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
   sqlContext.sql("CREATE TABLE IF NOT EXISTS e360_models.employee(id INT, name STRING, age INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'")

   sqlContext.sql("insert into table e360_models.employee select t.* from (select 1210, 'rahul', 55) t")
   sqlContext.sql("insert into table e360_models.employee select t.* from (select 1211, 'sriram pv', 35) t")
   sqlContext.sql("insert into table e360_models.employee select t.* from (select 1212, 'gowri', 59) t")

   val result = sqlContext.sql("FROM e360_models.employee SELECT id, name, age")
   result.show()

그러나이 방법은웨어 하우스에서 아래와 같이 삽입 할 때마다 별도의 파일을 만듭니다.

part-00000
part-00000_copy_1
part-00000_copy_2
part-00000_copy_3

이것을 피하고 새로운 데이터를 단일 파일에 추가하거나 스파크에서 하이브에 데이터를 삽입하는 다른 더 좋은 방법이 있습니까?

해결법

  1. ==============================

    1.아니요, 그렇게 할 방법이 없습니다. 각각의 새로운 삽입은 새로운 파일을 생성합니다. Spark "문제"는 아니지만 Hive에서도 경험할 수있는 일반적인 동작입니다. 유일한 방법은 모든 데이터의 UNION을 사용하여 단일 삽입을 수행하는 것이지만 여러 삽입을 수행해야하는 경우 파일이 여러 개 있습니다.

    아니요, 그렇게 할 방법이 없습니다. 각각의 새로운 삽입은 새로운 파일을 생성합니다. Spark "문제"는 아니지만 Hive에서도 경험할 수있는 일반적인 동작입니다. 유일한 방법은 모든 데이터의 UNION을 사용하여 단일 삽입을 수행하는 것이지만 여러 삽입을 수행해야하는 경우 파일이 여러 개 있습니다.

    당신이 할 수있는 유일한 일은 하이브에서 파일 병합을 활성화하는 것입니다 (여기를 참조하십시오 : Hive HDFS 및 https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties의 각 삽입에 대해 다중 작은 파일 만들기) .

  2. from https://stackoverflow.com/questions/37594958/insert-data-into-a-hive-table-with-hivecontext-using-spark-scala by cc-by-sa and MIT license