কয়েক মিলিয়ন রেকর্ড সন্নিবেশনের সবচেয়ে কার্যকর উপায় কী বলে স্পার্ক ডেটাফ্রেম থেকে পোস্টগ্রিস টেবিলগুলিতে 50 মিলিয়ন। অতীতে আমি স্পার্ক থেকে এমএসএসকিউএল পর্যন্ত বাল্ক কপি এবং ব্যাচের আকারের বিকল্পটি ব্যবহার করে সফল হয়েছি ।
পোস্টগ্রিসের জন্য এখানে কি অনুরূপ কিছু থাকতে পারে?
আমার চেষ্টা করা কোড এবং প্রক্রিয়াটি চালাতে যে সময়টি লেগেছে তা যোগ করা:
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 মিনিট খারাপ না , কিন্তু কে এই প্রশ্নের সাহায্যের উত্তর আগে এই কাজ করতাম সেখানে আউট মানুষ খুঁজছেন।