2015-08-28 2 views
6

मेरे पास एक स्ट्रीमिंग पाइपलाइन है जो पब/उप तक जुड़ी हुई है जो जीसीएस फाइलों के फाइलनाम प्रकाशित करती है। वहां से मैं प्रत्येक फाइल को पढ़ना चाहता हूं और प्रत्येक पंक्ति पर घटनाओं को पार्स करना चाहता हूं (घटनाएं मैं अंततः प्रक्रिया करना चाहता हूं)।पाइपलाइन में जीसीएस फाइलनामों के पीसीओलेक्शन से फ़ाइलें पढ़ें?

क्या मैं टेक्स्टियो का उपयोग कर सकता हूं? क्या आप इसे स्ट्रीमिंग पाइपलाइन में उपयोग कर सकते हैं जब फ़ाइल नाम निष्पादन के दौरान परिभाषित किया जाता है (जैसा कि स्रोत के रूप में टेक्स्टियो का उपयोग करने के विपरीत और फ़ाइल नाम (निर्माण) ज्ञात हैं)। मैं निम्नलिखित की तरह कुछ करने का सोच रहा हूँ अगर नहीं:

पब/उप पार्डो से विषय जाओ प्रत्येक फ़ाइल पढ़ सकते हैं और लाइनों प्रक्रिया फ़ाइल की तर्ज पाने के लिए ...

मैं जा सका फ़ाइलों को पढ़ने के लिए FileBasedReader या इस मामले में समान कुछ का उपयोग करें? फाइलें बहुत बड़ी नहीं हैं इसलिए मुझे एक फ़ाइल के पढ़ने को समानांतर करने की आवश्यकता नहीं होगी, लेकिन मुझे बहुत सी फाइलें पढ़ने की आवश्यकता होगी।

+0

हम इसके प्रभावी कार्यान्वयन के लिए पर्याप्त API समर्थन रखने के करीब हैं। कृपया https://issues.apache.org/jira/browse/BEAM-2511 का पालन करें टेक्स्टियो को फ़ाइल नामों के पीसीओलेक्शन को पढ़ने का समर्थन करना चाहिए। – jkff

+0

मैंने नए एपीआई को प्रतिबिंबित करने के लिए अपना जवाब संपादित किया। – jkff

उत्तर

3

आप TextIO.readAll() परिवर्तन का उपयोग कर सकते हैं, जिसे हाल ही में #3443 में बीम में जोड़ा गया है। उदाहरण के लिए:

PCollection<String> filenames = p.apply(PubsubIO.readStrings()...); 
PCollection<String> lines = filenames.apply(TextIO.readAll()); 

यह पबूब पर पहुंचने वाली प्रत्येक फ़ाइल में सभी पंक्तियों को पढ़ेगा।

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