2021.04.05 - [학습장/Hadoop] - vertica-spark 연동
vertica-spark 연동
Vertica와 pyspark 연동을 위해 버티카쪽에서 필요한 설정 1. VERIFY_HADOOP_CONF_DIR 연동하고자 하는 hadoop의 core-site.xml, hdfs-site.xml 파일을 버티카 전체 노드마다 /etc/hadoop/conf 에 위치시킴. 아래..
ourhistory160109.tistory.com
vertica-pyspark 커넥터 활용한 vertica와 pyspark 간 load(), save() 통한 연동에 관한 포스팅에 이어 jdbc 활용하여 pyspark Dataframe을 RDB 테이블에 적재하는 방법에 대해 포스팅하고자 합니다.
ex) save to Vertica
df.write \
.format("jdbc") \
.mode("append") \
.option("url","jdbc:vertica://host:port/dbname") \
.option("user", "DBUSER") \
.option("password", "USER_PASSWORD") \
.option("dbtable", "tableName") \
.option("driver","com.vertica.jdbc.Driver") \
.save()
mode - overwrite, append, ignore, error
Spark implicitly converts StringType to Text, Datatype which is not supported by Vertica
참고 - akashrehan.wordpress.com/2018/01/22/spark-dialect-for-datatype-conversion/
Spark JDBC Dialects for Datatype conversion
Spark SQL includes a data source that can read data from other databases using JDBC. This functionality should be preferred over using JdbcRDD. This is because the results are returned as a DataFra…
akashrehan.wordpress.com
overwrite 시에는 spark 에서 dataframe의 컬럼명, 타입에 따라 타겟DB에 테이블을 DROP 후 재생성하는데, dataframe에서 String인 경우 DB상의 해당 컬럼은 TEXT 타입으로 생성해버림. 버티카와 같이 TEXT 타입을 지원하지 않는 DB의 경우 테이블 생성 단계에서 에러 발생.
[Vertica][VJDBC](5108) ERROR: Type "TEXT" does not exist
이런 경우에 dataframe 에서의 String 컬럼은 varchar 타입으로 미리 타겟 테이블을 생성해두고 mode='append' 로 수행해보니 정상 동작함.
다만, 위 구문 만으로는 타겟 테이블에서 중복 방지를 위해 적재 전에 삭제 할 수가 없어서, 해당 DB와 연동 되는 python 패키지 등을 활용해서 쿼리로 write() 전에 별도 삭제 필요함.
spark-vertica 커넥터 활용한 save()는 vertica가 클라이언트로서 HDFS에 접근하여 *.orc 파일을 테이블로 적재하는 반면, 위 처럼 jdbc 활용한 방법은 spark -> vertica 방향으로 적재가 이루어 지는 것으로 보임. (어떤 방법이 더 유리하려나..?)
'학습장 > Data Engineering' 카테고리의 다른 글
ERROR s2v.S2V: ERROR: S2V.save(): did not pass the Vertica requirements pre-check. (0) | 2021.07.14 |
---|---|
spark dataframe to vertica (0) | 2021.06.29 |
DataStage 쿼리 결과값을 파라미터로 활용 (0) | 2021.04.20 |
vertica-spark 연동 (0) | 2021.04.05 |
sqoop upsert시 Mixed update/insert is not supported against the target database yet (0) | 2021.04.02 |
댓글