Partitioning
s3에 데이터를 저장할 때 where 조건절에 자주 쓰이면서 유니크한 수가 많지 않은 칼럼을 기준으로 파티셔닝을 해서 저장할 수 있다.
ex. year month
- saveAsTable : df.write.partitionBy('partCol1','partCol2').saveAsTable('dbname.tablename')
- spark write : df.write.partitionBy("partCol").save("/location")
- unload : sql_context = "unload('select * from schema.tabnm') to 'path' partition by ('partCol')"
이렇게 저장하면 저장 S3경로에 partitionBy 칼럼명을 기준으로 하위폴더가 생성되고, 그 안에 해당하는 데이터가 적재된다.
이 데이터를 spark 어플리케이션에서 읽어올 때, where 절에 해당 칼럼을 넣으면, 조건에 맞는 partition 폴더의 파일들만 스캔해서 가져온다는 장점이있다.
※ unload example
import pgdb
con = pgdb.connect(database='dbname', host=hostname, user=username, password=pw, port=3360/5439)
cur = con.cursor()
sqlContext = df.write.partitionBy('year', 'month').saveAsTable('dbname.tablename')
cur.execute(sql_context)
sql_count = cur.fetchall()