[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.먼저 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.실제로 이것을 달성하기 위해 검사 점을 사용할 수도 있습니다. 데이터 계보가 깨지기 때문에 Spark은 같은 테이블에서 읽고 읽는 것을 감지 할 수 없습니다.
실제로 이것을 달성하기 위해 검사 점을 사용할 수도 있습니다. 데이터 계보가 깨지기 때문에 Spark은 같은 테이블에서 읽고 읽는 것을 감지 할 수 없습니다.
sqlContext.sparkContext.setCheckpointDir(checkpointDir) val ds = sqlContext.sql("select * from some_table").checkpoint() ds.write.mode("overwrite").saveAsTable("some_table")
-
==============================
3.먼저 parquet 파일과 같이 DataFrame y를 저장해야합니다.
먼저 parquet 파일과 같이 DataFrame y를 저장해야합니다.
y.write.parquet("temp_table")
다음과 같이로드하십시오.
val parquetFile = sqlContext.read.parquet("temp_table")
그리고 테이블에 데이터를 삽입하십시오.
parquetFile.write.insertInto("some_table")
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
'HADOOP' 카테고리의 다른 글
[HADOOP] Docker Swarm에서 Hadoop을 설정하는 방법은 무엇입니까? (0) | 2019.07.10 |
---|---|
[HADOOP] 하이브 쿼리의 간단한 예가 있습니까? (0) | 2019.07.10 |
[HADOOP] Hive에서 밀리 초 단위로 문자열을 타임 스탬프로 변환하는 방법 (0) | 2019.07.10 |
[HADOOP] Hadoop / MapReduce를 사용하여 연결된 구성 요소 찾기 (0) | 2019.07.10 |
[HADOOP] hadoop 분산 캐시에서 파일 액세스하기 (0) | 2019.07.09 |