2017-12-22 29 views
0

다음은 RDBMS에 연결하기 위해 작성한 코드입니다. 임시 테이블을 만들고, 임시 테이블에서 SQL 쿼리를 실행하고, SQL 쿼리 출력을 .csv 형식으로 저장합니다. through databricks 모듈.spark를 통해 기존 HIVE 이야기에 csv 파일로드

py4j.protocol.Py4JJavaError: An error occurred while calling o68.saveAsTable. 
: java.lang.RuntimeException: Append mode is not supported by com.databricks.spark.csv.DefaultSource15 

가 있음을합니까 : HIVE.DB가 HIVE.TBL 기존 하이브 DATABASE 입니다

from pyspark import SparkContext 
sc = SparkContext("local", "Simple App") 
from pyspark.sql import SQLContext, Row 
sqlContext = SQLContext(sc) 
from pyspark.sql import HiveContext 
sqlContext = HiveContext(sc) 

df = sqlContext.read.format("jdbc").option("url","jdbc:sqlserver://<server>:<port>").option("databaseName","xxx").option("driver","com.microsoft.sqlserver.jdbc.SQLServerDriver").option("dbtable","xxxx").option("user","xxxxx").option("password","xxxxx").load() 

df.registerTempTable("test") 

df1= sqlContext.sql("select * from test where xxx= 6") 
df1.write.format("com.databricks.spark.csv").save("/xxxx/xxx/ami_saidulu") 

df1.write.option("path", "/xxxx/xxx/ami_saidulu").saveAsTable("HIVE_DB.HIVE_TBL",format= 'csv',mode= 'Append') 

내가 코드를 실행 한 후

, 나는 오류가 아래 얻고 기존 HIVE 표입니다 의미, databricks 모듈 "saveAsTable"함수를 지원하지 않습니다?

예인 경우 내 코드의 실수를 지적하십시오. 아니요, 그렇다면 솔루션/해결 방법/업계 표준은 무엇입니까?

스파크 1.6.1

+0

하이브 테이블을 외부 또는 관리합니까? 사이에 CSV를 쓰는 이유가 있습니까, df.write.saveAsTable ('HIVE_DB.HIVE_TBL', write_mode = 'Append') 할 수 없습니까? – kutschkem

+0

그것의 관리되는 테이블, 그리고 네, 당신의 요점을 가지고. 지금 당신의 제안에 따라 변경 한 후 코드를 실행할 때 "SLF4J : 클래스"org.slf4j.impl.StaticLoggerBinder "클래스를로드하지 못했습니다. SLF4J : 기본값으로 no-operation (NOP) 로거 구현" – user3521180

+1

오류 또는 경고입니까? 나는 코드가 여전히 작동해야한다고 가정하고, 아무 것도 로그하지 않는다. – kutschkem

답변

1

다른 해결책을 제안 할 수 있습니다.

삽입 기능을 사용하여 테이블에 삽입 할 수 있습니다.

sqlContext.sql("INSERT INTO/OVERWRITE TABLE HIVE_DB.HIVE_TBL select * from test where xxx= 6") 

나는 왜 CSV로 작성하고 싶어하고 테이블에 기록이 솔루션은 당신을 도울 것입니다 당신이 직접 테이블로 쓸 수 있기를 바랍니다?

텍스트로 구분 된 파일을 @table 경로로 지정하려는 경우에도. 필요한 구분 기호가있는 테이블을 TextFile 테이블로 정의하면됩니다. 파일 @ 테이블 경로는 삽입 후 구분 된 경로가됩니다.

감사합니다.

0

이 테이블은 관리 가정하면 그냥 df.write.saveAsTable 할 ('HIVE_DB.HIVE_TBL'를 write_mode은 = '추가]')가, 필요 중간 csv- 통과하지 않으려면 파일.

이 오류가 의미하는 것은 csv의 databricks 모듈이 추가 모드를 지원하지 않는다는 것입니다. github here에 문제가 있습니다. 그래서 솔루션은 추가 모드와 함께 csv를 사용하지 않는 것입니다.