2017-12-21 4 views
0

EMR에서 하이브 Metastore를 사용 중입니다. HiveSQL을 통해 수동으로 테이블을 쿼리 할 수 ​​있습니다.
하지만 스파크 작업에 동일한 테이블을 사용하는 경우, 그것은 입력 경로가 존재하지 않습니다 말한다 : S3 : org.apache.hadoop.mapred.InvalidInputException :에 의한 //사용 가능한 지정된 파티션 경로가 없으면 SPARK SQL이 실패 함

입력 경로를 내가 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

+0

과 시도 'S3A : //'대신 'S3 : //' –

+1

S3 경로에 : 다른 테이블과 잘 작동과 같은 테이블이 하이브에서 잘 작동 //! – logan

+0

1) Hive와 대화하고 싶다면 SQLContext 사용을 중지하십시오. 2) SparkSession에 명시 적으로 'enableHiveSupport()'가 필요합니다. –

답변

1

은 내가 메타 스토어는 테이블에 대한 파티션을 유지 HDFS와 유사한 오류가 있었다, 그러나이없는 경우 디렉토리는 ...

확인 S3 누락 된, 또는 당신은 그것을 삭제 Hive에서 MSCK REPAIR TABLE을 실행해야합니다. 때때로이 작동하지 않습니다, 당신은 실제로 속성이 기본적으로 거짓하는 DROP PARTITION

해야합니까,하지만 당신은 SparkContext

from pyspark import SparkConf, SparkContext 

conf = SparkConf().setAppName("test").set("spark.sql.hive.verifyPartitionPath", "false")) 
sc = SparkContext(conf = conf) 

또는, 불꽃이 방법에 SparkConf 객체를 전달하여 구성 등록 정보를 설정 SparkSession을 사용 중입니다.

from pyspark.sql import SparkSession 

spark = SparkSession.builder \ 
...  .appName("test") \ 
...  .config("spark.sql.hive.verifyPartitionPath", "false") \ 
...  .enableHiveSupport() 
...  .getOrCreate() 
+0

나는 같은 오류가 발생합니다.''spark = SparkSession.builder.appName ("Hive Example")을 설정했습니다. config ("spark.sql.hive.verifyPartitionPath", "false"). enableHiveSupport(). getOrCreate() '' 발생 원인 : org.apache.hadoop.mapred.InvalidInputException : 입력 경로가 존재하지 않습니다 : s3 : // – logan

+0

좋아, 그 속성은 문제가 아닙니다 ... 귀하의 질문은 Spark을 구성하는 방법이었습니다 –

+1

어디서 읽었습니까? 언급 한 오류에 대한 해결책? 전체 스택 트레이스를 보여줄 수 있습니까? –

관련 문제