2015-05-15 3 views
21

मैं स्कैला एपीआई के साथ संपूर्ण अपाचे स्पार्क एसक्यूएल डाटाफ्रेम प्रदर्शित करना चाहता हूं।क्या संपूर्ण स्पार्क एसक्यूएल डेटाफ्रेम प्रदर्शित करने का कोई बेहतर तरीका है?

myDataFrame.show(Int.MaxValue) 

वहाँ Int.MaxValue का उपयोग करने से एक पूरे DataFrame प्रदर्शित करने के लिए एक बेहतर तरीका है: मैं show() विधि का उपयोग कर सकते हैं?

+1

'myDataFrame.show (false)' आज़माएं। यकीन नहीं है कि आप क्या देख रहे हैं। – Pramit

+0

इस एसओ पोस्ट में चर्चा के अनुसार RDD.toLocalIterator() का उपयोग करें: http://stackoverflow.com/questions/21698443/spark-best-practice-for-retrieving-big-data-from-rdd-to-local-machine –

उत्तर

37

यह आम तौर पर stdout करने के लिए एक पूरी DataFrame प्रदर्शित करने के लिए उचित नहीं है, क्योंकि आप ड्राइवर के लिए पूरे DataFrame (अपने मूल्यों के सभी) खींचने के लिए (जब तक DataFrame पहले से ही स्थानीय है, जो आप df.isLocal के साथ जांच कर सकते हैं) की जरूरत है इसका मतलब है कि ।

जब तक आप समय से पहले नहीं जानते कि आपके डेटासेट का आकार पर्याप्त रूप से छोटा है ताकि ड्राइवर जेवीएम प्रक्रिया में सभी मानों को समायोजित करने के लिए पर्याप्त मेमोरी उपलब्ध हो, तो ऐसा करना सुरक्षित नहीं है। यही कारण है कि डेटाफ्रेम एपीआई show() डिफ़ॉल्ट रूप से आपको केवल पहली 20 पंक्तियां दिखाती है।

आप df.collect जो Array[T] रिटर्न इस्तेमाल कर सकते हैं और उसके बाद प्रत्येक पंक्ति के ऊपर पुनरावृति और इसे प्रिंट:

df.collect.foreach(println) 

लेकिन आप सभी df.showString(numRows: Int) में लागू स्वरूपण खो (कि show() आंतरिक रूप से उपयोग करता है)।

तो नहीं, मुझे लगता है कि कोई बेहतर तरीका नहीं है।

+0

विस्तृत उत्तर के लिए धन्यवाद! –

+0

आपका स्वागत है :) –

+0

'df.toJSON.collect.foreach (println)' बेहतर –

0

कुछ भी नहीं है कि अधिक से अधिक संक्षिप्त, लेकिन अगर आप Int.MaxValue से बचना चाहते हैं, तो आप एक collect उपयोग करें और यह, या foreach संसाधित कर सकते हैं। लेकिन, बिना किसी मैनुअल कोड के टैब्यूलर प्रारूप के लिए, show सबसे अच्छा है जो आप कर सकते हैं।

2

जैसा कि अन्य ने सुझाव दिया था, पूरे डीएफ को प्रिंट करना बुरा विचार है। हालांकि, अगर आप df.rdd.foreachPartition(f) का उपयोग बाढ़ ड्राइवर JVM (कलेक्ट का उपयोग कर y)

+0

क्या आप कुछ नमूना कोड प्रदान कर सकते हैं? 'F()' फ़ंक्शन के अंदर प्रिंट स्टेटमेंट श्रमिकों के stdout पर प्रिंट नहीं करेगा, न कि चालक/आपके शैल सत्र के stdout? यह भी देखें http://stackoverflow.com/a/28804763/215945 –

-2

मैं कोशिश की है शो() और यह कभी कभी काम कर लगता है बिना विभाजन-दर-विभाजन को मुद्रित कर सकते हैं।

println(df.show()) 
+5

dr.show() स्ट्रिंग शून्य नहीं देता है। – Bradjcox

+0

डिफ़ॉल्ट रूप से, यह केवल शीर्ष 20 पंक्तियों को दिखाता है –

1

java में मैं दो तरीकों के साथ यह कोशिश की है: लेकिन कभी कभी काम नहीं कर रहा है, बस इसे आजमाइए। यह पूरी तरह से मेरे लिए काम कर रहा है:

1.

data.show(SomeNo); 

2.

data.foreach(new ForeachFunction<Row>() { 
       public void call(Row arg0) throws Exception { 
        System.out.println(arg0); 
       } 
      }); 
2

एक तरह से count() समारोह उपयोग कर रहा है रिकॉर्ड की कुल संख्या हो और show(rdd.count()) उपयोग करने के लिए ।

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