복붙노트

[HADOOP] 하이브 테이블에서 읽기 및 spark SQL을 사용하여 다시 쓰기

HADOOP

하이브 테이블에서 읽기 및 spark SQL을 사용하여 다시 쓰기

스파크 SQL을 사용하는 하이브 테이블을 읽고 스칼라 밸리에 할당하고 있습니다.

val x = sqlContext.sql("select * from some_table")

그런 다음 데이터 프레임 x를 사용하여 일부 처리를 수행하고 마침내 some_table 테이블과 동일한 스키마가있는 데이터 프레임 y를 작성합니다.

마지막으로 같은 하이브 테이블 some_table에 y 데이터 프레임을 덮어 쓰려고합니다.

y.write.mode(SaveMode.Overwrite).saveAsTable().insertInto("some_table")

그런 다음 오류가 발생합니다.

삽입 sql 문을 만들고 sqlContext.sql ()을 사용하여 실행하려고 시도했지만 동일한 오류가 발생했습니다.

이 오류를 무시할 수있는 방법이 있습니까? 같은 테이블에 레코드를 다시 삽입해야합니다.

안녕하세요, 제안대로 일을 시도했지만 여전히 같은 오류가 발생합니다.

val x = sqlContext.sql("select * from incremental.test2")
val y = x.limit(5)
y.registerTempTable("temp_table")
val dy = sqlContext.table("temp_table")
dy.write.mode("overwrite").insertInto("incremental.test2")

scala> dy.write.mode("overwrite").insertInto("incremental.test2")
             org.apache.spark.sql.AnalysisException: Cannot insert overwrite into table that is also being read from.;

해결법

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

    1.먼저 DataFrame y를 임시 테이블에 저장해야합니다.

    먼저 DataFrame y를 임시 테이블에 저장해야합니다.

    y.write.mode("overwrite").saveAsTable("temp_table")
    

    그런 다음 대상 테이블의 행을 덮어 쓸 수 있습니다.

    val dy = sqlContext.table("temp_table")
    dy.write.mode("overwrite").insertInto("some_table")
    
  2. ==============================

    2.실제로 이것을 달성하기 위해 검사 점을 사용할 수도 있습니다. 데이터 계보가 깨지기 때문에 Spark은 같은 테이블에서 읽고 읽는 것을 감지 할 수 없습니다.

    실제로 이것을 달성하기 위해 검사 점을 사용할 수도 있습니다. 데이터 계보가 깨지기 때문에 Spark은 같은 테이블에서 읽고 읽는 것을 감지 할 수 없습니다.

     sqlContext.sparkContext.setCheckpointDir(checkpointDir)
     val ds = sqlContext.sql("select * from some_table").checkpoint()
     ds.write.mode("overwrite").saveAsTable("some_table")
    
  3. ==============================

    3.먼저 parquet 파일과 같이 DataFrame y를 저장해야합니다.

    먼저 parquet 파일과 같이 DataFrame y를 저장해야합니다.

    y.write.parquet("temp_table")
    

    다음과 같이로드하십시오.

    val parquetFile = sqlContext.read.parquet("temp_table")
    

    그리고 테이블에 데이터를 삽입하십시오.

    parquetFile.write.insertInto("some_table")
    
  4. from https://stackoverflow.com/questions/38746773/read-from-a-hive-table-and-write-back-to-it-using-spark-sql by cc-by-sa and MIT license