मेरे पास 64 बिट, 4-कोर, 2.50GHz, 64GB सिस्टम है जिसमें 13GB मुफ्त मेमोरी है। मैं नीचे दिए गए कोड के साथ लगभग ४० सैन्य पंक्तियों के साथ २४ सीएसवी पढ़ने की कोशिश कर रहा हूँ;

def test():
    test = pd.DataFrame()
    rootdir ='/XYZ/A'
    for subdir, dirs, files in os.walk(rootdir):
        for file in files:
            df = pd.read_csv(os.path.join(subdir, file), low_memory=False)
            test = pd.concat([test, df])
    return test

कर्नेल मरने के बिना, मैं इसे तेजी से चलाने के लिए कैसे अनुकूलित कर सकता हूं। क्या मुझे इसके बजाय इसे Pyspark में लागू करना चाहिए ??? कृपया मुझे बताएं कि क्या मैंने कोई विवरण याद किया है।

0
Abhi 25 मार्च 2020, 21:21

1 उत्तर

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

इसे देखें, मैंने pathlib का उपयोग किया है मॉड्यूल, चूंकि यह अधिक संक्षिप्त और स्पष्ट कोड IMHO प्रदान करता है और क्योंकि आप इटरेटर और जनरेटर अभिव्यक्तियों का लाभ उठा सकते हैं:

from pathlib import Path
def test():
    rootdir ='/XYZ/A'
    #assumption is that they are all csvs
    #if not. u could just use rglob('*.*')
    #this will recursively search through the directory
    #and pull all files with the extension csv
    #or all files if u use ('*.*')
    #which might be a bit more intensive computation
    all_files = Path(rootdir).rglob('*.csv')
    all_dfs = (pd.read_csv(f)
               #kindly test this aspect and c
               #stem gets u the name before '.csv'
               #and returns a string
               #rsplit splits based on the last '_'
               .assign(Date = f.stem.rsplit('_')[-1])
               for f in all_files)
    #trying to delay the intense computation till it gets here
    #hence the use of generator expressions
    final_df = pd.concat(all_dfs,ignore_index=True)
    return final_df

आइए जानते हैं कि यह कैसा चल रहा है; अगर यह विफल रहता है, तो मैं इसे हटा दूंगा ताकि दूसरों को भ्रमित न करें।

0
sammywemmy 26 मार्च 2020, 06:28