मैं एक स्पार्क निम्नलिखित संरचना के साथ 2.0 dataframe example
है:स्पार्क डेटाफ्रेम: क्या समूह क्रम के बाद वह आदेश बनाए रखता है?
id, hour, count
id1, 0, 12
id1, 1, 55
..
id1, 23, 44
id2, 0, 12
id2, 1, 89
..
id2, 23, 34
etc.
यह प्रत्येक आईडी (दिन के प्रत्येक घंटे के लिए एक) के लिए 24 प्रविष्टियों शामिल और orderBy समारोह का उपयोग कर, आईडी द्वारा आदेश दिया है घंटे।
def groupConcat(separator: String, columnToConcat: Int) = new Aggregator[Row, String, String] with Serializable {
override def zero: String = ""
override def reduce(b: String, a: Row) = b + separator + a.get(columnToConcat)
override def merge(b1: String, b2: String) = b1 + b2
override def finish(b: String) = b.substring(1)
override def bufferEncoder: Encoder[String] = Encoders.STRING
override def outputEncoder: Encoder[String] = Encoders.STRING
}.toColumn
यह मेरे तार में कॉलम जोड़ इस अंतिम dataframe प्राप्त करने के लिए मदद करता है::
id, hourly_count
id1, 12:55:..:44
id2, 12:89:..:34
etc.
मेरे सवाल है, अगर मैं example.orderBy($"id",$"hour").groupBy("id").agg(groupConcat(":",2) as "hourly_count")
करते हैं, कि गारंटी करता है
मैं एक एग्रीगेटर groupConcat
बनाया है कि प्रति घंटा की गणना उनके संबंधित बाल्टी में सही ढंग से आदेश दिया जाएगा?
मैंने पढ़ा है कि यह आरडीडी के लिए आवश्यक नहीं है (Spark sort by key and then group by to get ordered iterable? देखें), लेकिन शायद यह डेटाफ्रेम के लिए अलग है?
यदि नहीं, तो मैं इसके आसपास कैसे काम कर सकता हूं?
आप किसी भी संदर्भ बताते हुए है समूह द्वारा आदेश जारी रखता है? मुझे आधिकारिक दस्तावेज़ –
में कुछ भी नहीं मिला, मेरे पास आधिकारिक दस्तावेज़ नहीं हैं, लेकिन मेरे पास यह आलेख है जो तंत्र को थोड़ा बेहतर बताता है https://bzhangusc.wordpress.com/2015/05/28/groupby-on -डेटाफ्रेम-है-द-ग्रुपबी-ऑन-आरडीडी/टिप्पणियां भी दिलचस्प हैं। – Interfector
दिलचस्प है, यहां तक कि शॉन ओवेन खुद कहा गया है कि आदेश को संरक्षित नहीं किया जा सकता है (https://issues.apache.org/jira/browse/SPARK-16207?focusedCommentId=15356725&page=com.atlassian.jira.plugin.system.issuetabpanels% 3Acomment-tabpanel # टिप्पणी-15,356,725) –