स्पार्क डेटाफ्रेम से पोस्टग्रैब टेबल्स में 50 मिलियन रिकॉर्ड के लाखों रिकॉर्ड डालने का सबसे कुशल तरीका क्या होगा। मैंने पिछले दिनों बल्क कॉपी और बैच साइज ऑप्शन का उपयोग करके स्पार्क से MSSQL तक किया है जो सफल भी रहा।
क्या ऐसा ही कुछ है जो यहाँ पोस्टग्रेज के लिए हो सकता है?
जो कोड मैंने कोशिश की है उसे जोड़ने और प्रक्रिया को चलाने में लगने वाला समय:
def inserter():
start = timer()
sql_res.write.format("jdbc").option("numPartitions","5").option("batchsize","200000")\
.option("url", "jdbc:postgresql://xyz.com:5435/abc_db") \
.option("dbtable", "public.full_load").option("user", "root").option("password", "password").save()
end = timer()
print(timedelta(seconds=end-start))
inserter()
इसलिए मैंने 10 मिलियन रिकॉर्ड के लिए उपर्युक्त दृष्टिकोण किया और 5 समानांतर कनेक्शन थे, numPartitions
जिसमें 200k के बैच आकार की कोशिश की गई थी ।
इस प्रक्रिया के लिए कुल समय 0: 14: 05.760926 (चौदह मिनट और पांच सेकंड) था।
क्या कोई अन्य कुशल दृष्टिकोण है जो समय को कम करेगा?
कुशल या इष्टतम बैच आकार क्या होगा जिसका मैं उपयोग कर सकता हूं? क्या मेरे बैच का आकार बढ़ने से नौकरी जल्दी हो जाएगी? या कई कनेक्शन खोलना>> 5 प्रक्रिया को तेज करने में मेरी मदद करें?
एक पर 10 लाख रिकॉर्ड के लिए औसत 14 मिनट बुरा नहीं है , लेकिन जो इस सवाल का जवाब देने के लिए मदद करने से पहले इस किया होता वहाँ बाहर लोगों की तलाश में।