如何通过apachespark将大表从psql移动到gcloud上的parquet?

2exbekwf  于 2021-06-27  发布在  Hive
关注(0)|答案(0)|浏览(218)

我有一个大表(大约300gb)和一个大约50gb的ram,还有8个CPU。
我想使用spark和jdbc连接将我的psql表移动到google云存储中。非常类似于:如何将500gbsql表转换为apacheparquet?。
我知道我的关系很好,因为我可以移动一张小table。但是大table让我记忆犹新。如何优化它?

import pyspark
from pyspark.sql import SQLContext
from pyspark import SparkContext
from pyspark.sql import DataFrameReader

conf = pyspark.SparkConf().setAll([("spark.driver.extraClassPath", "/usr/local/bin/postgresql-42.2.5.jar:/usr/local/jar/gcs-connector-hadoop2-latest.jar")
                                   ,("spark.executor.instances", "8")
                                   ,("spark.executor.cores", "4")
                                   ,("spark.executor.memory", "1g")
                                  ,("spark.driver.memory", "6g")
                                  ,("spark.memory.offHeap.enabled","true")
                                   ,("spark.memory.offHeap.size","40g")])

sc = pyspark.SparkContext(conf=conf)
sc.getConf().getAll()

sc._jsc.hadoopConfiguration().set("google.cloud.auth.service.account.json.keyfile","/home/user/analytics/gcloud_key_name.json")
sqlContext = SQLContext(sc)

url = 'postgresql://address:port/db_name'
properties = {
              'user': 'user', 
              'password': 'password'}
df_users = sqlContext.read.jdbc(
    url='jdbc:%s' % url, table='users', properties=properties
)

gcloud_path= "gs://BUCKET/users"
df_users.write.mode('overwrite').parquet(gcloud_path)

额外的问题:我现在可以做分区,或者首先我应该保存为Parquet,然后阅读它和重新分区?
奖金问题2:如果奖金问题1的答案是肯定的,我可以现在进行排序,或者首先我应该将其保存为Parquet地板,然后阅读并重新分配它?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题