我有一个大表(大约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地板,然后阅读并重新分配它?
暂无答案!
目前还没有任何答案,快来回答吧!