У меня большой стол (около 300 ГБ) и баран около (50 ГБ) и 8 процессоров.
Я хочу переместить свою таблицу psql в облачное хранилище Google, используя соединение spark и jdbc. очень похоже на: Как преобразовать таблицу SQL объемом 500 ГБ в Apache Parquet? .
Я знаю, что мои соединения работают, потому что я смог переместить небольшой стол. Но с большой таблицей у меня возникают проблемы с памятью. Как я могу оптимизировать это?
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)
Бонусный вопрос:
могу ли я сделать раздел сейчас, или сначала я должен сохранить его как паркет, затем прочитать его и перераспределить его?
Бонусный вопрос2:
Если ответ на бонусный вопрос 1 - да, могу ли я отсортировать его сейчас, или сначала я должен сохранить его как паркет, а затем прочитать и перераспределить его?