/ / स्पार्क - जावा, अपाचे-स्पार्क में tar.gz आर्काइव से एक फाइल पढ़ना

स्पार्क - जावा, अपाचे-स्पार्क में tar.gz संग्रह से एक फ़ाइल पढ़ना

मेरे पास tar.gz फाइलों का एक गुच्छा है, जिन्हें मैं स्पार्क के साथ संसाधित करना चाहूंगा, उन्हें डिकम्प्रेस किए बिना।

एक एकल संग्रह लगभग ~ 700 एमबी का है और इसमें 10 अलग-अलग फाइलें हैं लेकिन मुझे उनमें से केवल एक में दिलचस्पी है (जो कि अपघटन के बाद ~ 7 जीबी है)।

मुझे पता है कि context.textFile टार का समर्थन करता है।gz, लेकिन मुझे यकीन नहीं है कि यह सही उपकरण है जब एक संग्रह में एक से अधिक फ़ाइल होती हैं। क्या होता है कि स्पार्क संग्रह में सभी फाइलों (लाइन द्वारा लाइन) की सामग्री को लौटा देगा जिसमें कुछ बाइनरी डेटा के साथ फ़ाइल नाम भी शामिल हैं।

क्या कोई रास्ता है कि मैं tar.gz से किस फ़ाइल का चयन करूं, क्या मैं मैप करना चाहूंगा?

उत्तर:

उत्तर № 1 के लिए 1

AFAIK, मैं सुझाव देता हूं sc.binaryFiles विधि ... कृपया नीचे देखें दस्तावेज़। जहाँ फ़ाइल का नाम और फ़ाइल सामग्री मौजूद है, आप उस फ़ाइल को मैप और पिक कर सकते हैं जिसे आप चाहते हैं और उसे संसाधित करें।


public RDD<scala.Tuple2<String,PortableDataStream>> binaryFiles(String path,
int minPartitions)

एक Hadoop-readable डेटासेट के लिए RDD प्राप्त करें जैसा कि प्रत्येक फ़ाइल के लिए पोर्टेबलडायरेस्ट्रीम (बाइनरी डेटा के लिए उपयोगी) उदाहरण के लिए, यदि आपके पास निम्न फ़ाइलें हैं:

HDFS: // एक-HDFS-पथ / पार्ट-00000
HDFS: // एक-HDFS-पथ / पार्ट-00001
...
HDFS: // एक-HDFS-पथ / अंशकालिक nnnnn

वैल करते हैं rdd = sparkContext.binaryFiles("hdfs://a-hdfs-path"),

तो rdd शामिल हैं

(a-hdfs-path / part-00000, इसकी सामग्री)
(a-hdfs-path / part-00001, इसकी सामग्री)
...
(a-hdfs-path / part-nnnnn, इसकी सामग्री)

इसके अलावा, जांचें इस