मुझे मानदंड दिए गए स्लाइस निकालने के लिए बड़ी .csv फ़ाइलों (>1Gb प्रत्येक) की एक विशाल सूची (सैकड़ों) को पार्स करना होगा। समय के साथ मानदंड बदल सकते हैं, इसलिए इसे प्रतिलिपि प्रस्तुत करने योग्य होना चाहिए।

मैं तीन अलग-अलग दृष्टिकोणों का उपयोग करने पर विचार कर रहा हूं:

  • अच्छी बूढ़ी बिल्ली | grep। अंतिम उपाय, लेकिन समय के साथ संभव नहीं है अगर मैं पूरी प्रक्रिया को स्वचालित करना चाहता हूं।
  • पांडा के सीएसवी रीड फ़ंक्शन के साथ प्रत्येक फ़ाइल को लोड और पुनरावृत्त करें, और केवल मिलान वाली पंक्तियों को एक नई सीएसवी फ़ाइल में रखें। उदाहरण
  • डेटाबेस में प्रत्येक पंक्ति को आयात करें और मांग पर क्वेरी करें, अधिमानतः एसक्लाइट, लेकिन एमएस एसक्यूएल हो सकता है। उदाहरण

चूंकि पंक्ति-दर-पंक्ति पढ़ने से बचने का कोई तरीका नहीं है, प्रदर्शन के मामले में उन तीनों में से सबसे अच्छा तरीका कौन सा है? क्या कोई बेहतर विकल्प है?

3
JMartinez 28 मार्च 2018, 22:41

3 जवाब

सबसे बढ़िया उत्तर

शुरुआत में आप वह रास्ता चुनते हैं जो आपको सबसे तेज़ परिणाम तक पहुंचाएगा।

आपके प्रश्न के आधार पर मुझे लगता है कि आप पांडा से परिचित हैं; अगर ऐसा है तो आप इसे जल्दी से लागू कर पाएंगे, और यह अच्छा प्रदर्शन भी करेगा।

एक दीर्घकालिक समाधान का निर्माण करने का मतलब होगा कि आपको कच्चे डेटा (कितनी बार ऐसा होता है?) बनाम 'आउटपुट' को क्वेरी करने की ज़रूरतों को संतुलित करना होगा, और आउटपुट में परिणामों के अनुपात पर विचार करना होगा। अपने स्लाइस निकालने और परिणाम को पुन: उपयोग के लिए संग्रहीत करना समझ में आता है, लेकिन केवल तभी जब वह पुन: उपयोग मौजूद हो। यदि उन स्लाइस का बहुत कम पुन: उपयोग होता है, और मानदंड बार-बार बदलते हैं, तो हो सकता है कि आप हर बार डेटा को क्वेरी करते समय पुन: संसाधित करना चाहें।

2
Kirk Broadhurst 28 मार्च 2018, 19:54

चूंकि पंक्ति-दर-पंक्ति फ़ाइलों को पढ़ने से बचने का कोई तरीका नहीं है

हालांकि यह कुछ स्तर पर सच है, हो सकता है कि आपके कोड के लिए स्रोत फ़ाइलों RBAR को संसाधित करना आवश्यक न हो। आप डेटाबेस में पंक्तियों को डंप करने के लिए SQL सर्वर की bcp उपयोगिता (या SQLite समतुल्य) जैसी किसी चीज़ का उपयोग कर सकते हैं और फिर विश्लेषण के लिए पांडा में "स्लाइस" की आवश्यकता होती है।

0
Gord Thompson 28 मार्च 2018, 20:20

SQL डेटाबेस का उपयोग करने से आपकी क्वेरी "धीमी" हो जाएगी, क्योंकि यह सामग्री आपकी RAM में नहीं रहती है, लेकिन जैसे-जैसे डेटा बड़ा होता जाएगा, यह अधिक स्केलेबल होगा। यह आपको एक अलग कंप्यूटर पर डेटा होस्ट करने की भी अनुमति देगा ताकि आपको कंप्यूटिंग शक्ति साझा न करनी पड़े/क्लाउड सेवाओं का उपयोग कर सकें।

0
Narshe 28 मार्च 2018, 19:53