apache-spark
विन्यास: अपाचे स्पार्क एसक्यूएल
खोज…
परिचय
स्पार्क एसक्यूएल शफल विभाजन को नियंत्रित करना
अपाचे स्पार्क में, शफ़ल ऑपरेशन्स जैसे कि join
और cogroup
करते समय बहुत सारा डेटा पूरे नेटवर्क में ट्रांसफर हो जाता है। अब, विभाजन की संख्या को नियंत्रित करने के लिए जिस पर फेरबदल होता है उसे स्पार्क एसक्यूएल में दिए गए कॉन्फ़िगरेशन द्वारा नियंत्रित किया जा सकता है। वह विन्यास इस प्रकार है:
spark.sql.shuffle.partitions
इस कॉन्फ़िगरेशन का उपयोग करके हम फेरबदल कार्यों के विभाजन की संख्या को नियंत्रित कर सकते हैं। डिफ़ॉल्ट रूप से, इसका मूल्य 200
। लेकिन, 200 विभाजन का कोई मतलब नहीं है अगर हमारे पास कुछ जीबी (एस) की फाइलें हैं। इसलिए, हमें उन्हें स्पार्क एसक्यूएल के माध्यम से संसाधित किए जाने वाले डेटा की मात्रा के अनुसार बदलना चाहिए। इस प्रकार है:
इस परिदृश्य में हमारे पास employee
और department
शामिल होने के लिए दो टेबल हैं। दोनों तालिकाओं में केवल कुछ रिकॉर्ड होते हैं, लेकिन हमें प्रत्येक कर्मचारी के विभाग को जानने के लिए उनसे जुड़ने की आवश्यकता है। तो, हम उन्हें स्पार्क डेटाफ्रैम का उपयोग करके इस तरह से जोड़ते हैं:
val conf = new SparkConf().setAppName("sample").setMaster("local")
val sc = new SparkContext(conf)
val employee = sc.parallelize(List("Bob", "Alice")).toDF("name")
val department = sc.parallelize(List(("Bob", "Accounts"), ("Alice", "Sales"))).toDF("name", "department")
employeeDF.join(departmentDF, "employeeName").show()
अब, जुड़ने के दौरान बनने वाले विभाजन की संख्या डिफ़ॉल्ट रूप से 200 होती है जो इस डेटा की अधिक मात्रा के लिए निश्चित रूप से बहुत अधिक है।
तो, इस मान को बदलने देता है ताकि हम फेरबदल की संख्या को कम कर सकें।
val conf = new SparkConf().setAppName("sample").setMaster("local").set("spark.sql.shuffle.partitions", 2)
val sc = new SparkContext(conf)
val employee = sc.parallelize(List("Bob", "Alice")).toDF("name")
val department = sc.parallelize(List(("Bob", "Accounts"), ("Alice", "Sales"))).toDF("name", "department")
employeeDF.join(departmentDF, "employeeName").show()
अब, फेरबदल विभाजन की संख्या केवल 2 करने के लिए कम कर रहे हैं, जो केवल फेरबदल आपरेशन की संख्या को कम नहीं होगा, लेकिन यह भी समय से DataFrames में शामिल होने के लिए ले जाया को कम 0.878505 s
को 0.077847 s
।
इसलिए, हमेशा संसाधित किए जा रहे डेटा के अनुसार फेरबदल संचालन के लिए विभाजन की संख्या को कॉन्फ़िगर करें।