यह देखते हुए कि HashPartitioner डॉक्स कहते हैं:स्पार्क में कुंजी द्वारा विभाजन कैसे करें?
[HashPartitioner] को लागू करता है हैश आधारित जावा के Object.hashCode का उपयोग कर विभाजन।
मैं अपने kind
द्वारा DeviceData
विभाजन करना चाहते हैं।
case class DeviceData(kind: String, time: Long, data: String)
यह deviceData.hashCode()
विधि ओवरराइट करके एक RDD[DeviceData]
विभाजन और केवल kind
की hashCode उपयोग करने के लिए सही होगा?
लेकिन यह देखते हुए कि HashPartitioner
कई विभाजन पैरामीटर लेता है, मैं इस बात से उलझन में हूं कि मुझे अग्रिम प्रकार की संख्या जानने की आवश्यकता है और क्या होता है यदि विभाजन से अधिक प्रकार हैं?
यह सही जब पढ़ा है कि अगर मैं डिस्क में विभाजित डेटा लिखने यह विभाजित रहेगी है?
मेरा लक्ष्य
deviceDataRdd.foreachPartition(d: Iterator[DeviceData] => ...)
फोन और इटरेटर में एक ही kind
मूल्य का केवल DeviceData
की है।
अच्छा बिंदु। ऑब्जेक्ट्स बराबर बीसी नहीं होनी चाहिए, उनके समान ही हैं। – BAR
सं। यहां एक तार्किक झूठ है -> "जब तक किसी प्रकार की डिवाइस पर समानता के आधार पर समानता की धारणा आपके उपयोग के मामले में फिट नहीं होती है, और मुझे गंभीरता से संदेह होता है, वांछित विभाजन प्राप्त करने के लिए हैशकोड के साथ टंकण करना एक बुरा विचार है" हैशकोड इस तरह के आधार पर यह नहीं दर्शाता है कि समानता पूरी तरह से प्रकार पर आधारित है। बस, * अगर * 2 रिकॉर्ड समान हैं, तो उनके पास समान प्रकार है, और यह आसानी से संतुष्ट है। –