[HADOOP] SPARK SQL은 지정된 파티션 경로가없는 경우 실패합니다.
HADOOPSPARK SQL은 지정된 파티션 경로가없는 경우 실패합니다.
EMR에서 Hive Metastore를 사용하고 있습니다. HiveSQL을 통해 수동으로 테이블을 쿼리 할 수 있습니다. 하지만 Spark Job에서 같은 테이블을 사용할 때 입력 경로가 존재하지 않는다고합니다 : s3 : //
s3 : //에서 위의 파티션 경로를 삭제했지만 테이블 수준에서 파티션을 삭제하지 않고 하이브에서 계속 작동합니다. 어쨌든 pyspark에서 작동하지 않습니다.
여기 내 전체 코드가있다.
from pyspark import SparkContext, HiveContext
from pyspark import SQLContext
from pyspark.sql import SparkSession
sc = SparkContext(appName = "test")
sqlContext = SQLContext(sparkContext=sc)
sqlContext.sql("select count(*) from logan_test.salary_csv").show()
print("done..")
하이브 카탈로그 테이블을 사용하기 위해 다음과 같이 작업을 제출했습니다.
spark-submit test.py --files /usr/lib/hive/conf/hive-site.xml
해결법
-
==============================
1.Metastore가 테이블의 파티션을 유지했지만 디렉토리가 누락 된 HDFS와 비슷한 오류가 발생했습니다.
Metastore가 테이블의 파티션을 유지했지만 디렉토리가 누락 된 HDFS와 비슷한 오류가 발생했습니다.
s3을 확인하십시오. 누락되었거나 삭제 한 경우 하이브에서 MSCK REPAIR TABLE을 실행해야합니다. 때때로 이것은 작동하지 않으며 실제로 DROP PARTITION이 필요합니다.
이 속성은 기본적으로 false이지만 SparkConf 객체를 SparkContext에 전달하여 구성 속성을 설정합니다
from pyspark import SparkConf, SparkContext conf = SparkConf().setAppName("test").set("spark.sql.hive.verifyPartitionPath", "false")) sc = SparkContext(conf = conf)
또는 Spark 2 방법은 SparkSession을 사용하고 있습니다.
from pyspark.sql import SparkSession spark = SparkSession.builder \ ... .appName("test") \ ... .config("spark.sql.hive.verifyPartitionPath", "false") \ ... .enableHiveSupport() ... .getOrCreate()
from https://stackoverflow.com/questions/47933705/spark-sql-fails-if-there-is-no-specified-partition-path-available by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] HADOOP 맵에서 Generics를 사용하면 문제를 줄일 수 있습니다. (0) | 2019.07.03 |
---|---|
[HADOOP] hadoop에서 Peg에 Regex 사용하기 (0) | 2019.07.03 |
[HADOOP] 스파크 데이터 세트 쓰기의 차이점 (0) | 2019.07.03 |
[HADOOP] Hadoop wordcount 예제를 실행할 때 작업 토큰 파일을 찾을 수 없습니다. (0) | 2019.07.03 |
[HADOOP] 스파크 스트리밍은 "cp"와 "mv"로 작동합니다. (0) | 2019.07.03 |