2016-06-26 10 views
5

मान लें कि हमारे पास एक स्ट्रिंग कॉलम, col1, और एक सरणी कॉलम, col2 के साथ डेटाफ्रेम है। मैं सोच रहा था क्या स्पार्क ऑपरेशन में पर्दे के पीछे होता है:स्पार्क चयन-विस्फोट मुहावरे को कैसे कार्यान्वित किया जाता है?

df.select('col1', explode('col2'))

ऐसा लगता है कि select इनपुट के रूप में Column वस्तुओं की एक अनुक्रम लेता है, और explode एक Column तो मिलान प्रकारों देता है। लेकिन explode('col2') द्वारा लौटा गया कॉलम col1 की तुलना में अलग-अलग लंबाई का तार्किक रूप से है, इसलिए मैं सोच रहा था कि इसका आउटपुट डेटाफ्रेम बनाने के दौरान उन्हें "सिंक" करने का तरीका कैसा लगता है। मैंने सुराग के लिए Column कक्षा को देखने का प्रयास किया लेकिन वास्तव में कुछ भी नहीं मिला।

उत्तर

6

उत्तर सरल है - Column के रूप में ऐसी कोई डेटा संरचना नहीं है। जबकि स्पार्क एसक्यूएल कैशिंग के लिए कॉलमर स्टोरेज का उपयोग करता है और कुछ निम्न स्तर के ऑपरेशंस कॉलम के लिए डेटा लेआउट का लाभ उठा सकता है, डेटा डेटा कंटेनर डेटा और ट्रांसफॉर्मेशन का विवरण नहीं है। explode पर कुछ और flatMap की चीजों को सरल बनाना।

+0

धन्यवाद! मेरा सवाल तकनीकी रूप से डेटा फ्रेम के बारे में था, लेकिन मुझे लगता है कि यह वही है। यहां [इसका एक उदाहरण] है (https://github.com/apache/spark/blob/v2.0.0-rc1/sql/core/src/main/scala/org/apache/spark/sql/Dataset.scala# L1587-L1604) Dataset.scala स्रोत से। – hillel

+1

'डेटाफ्रेम' एक डेटासेट [पंक्ति] 'है। – zero323

संबंधित मुद्दे