यह बड़ी JSON फ़ाइलों को पढ़ने के बारे में नहीं है, इसके बजाय यह सबसे प्रभावी तरीके से JSON फ़ाइलों की बड़ी संख्या पढ़ने के बारे में है।पायथन में बड़ी संख्या में जेसन फाइलें पढ़ रहे हैं?
प्रश्न
मैं Million song dataset से last.fm डाटासेट के साथ काम कर रहा हूँ। डेटा जेएसओएन-एन्कोडेड टेक्स्ट फ़ाइलों के सेट के रूप में उपलब्ध है जहां कुंजी हैं: track_id, कलाकार, शीर्षक, टाइमस्टैम्प, सिमिलर और टैग।
वर्तमान में मैं उन्हें निम्नलिखित तरीके से पांडा में पढ़ रहा हूँ कुछ ही विकल्प के माध्यम से जा के रूप में इस से पता चला here के रूप में सबसे तेज है के बाद:
import os
import pandas as pd
try:
import ujson as json
except ImportError:
try:
import simplejson as json
except ImportError:
import json
# Path to the dataset
path = "../lastfm_train/"
# Getting list of all json files in dataset
all_files = [os.path.join(root,file) for root, dirs, files in os.walk(path) for file in files if file.endswith('.json')]
data_list=[json.load(open(file)) for file in all_files]
df = pd.DataFrame(data_list, columns=['similars', 'track_id'])
df.set_index('track_id', inplace=True)
वर्तमान पद्धति सबसेट (पूर्ण डाटासेट का 1% पढ़ता एक सेकंड से भी कम समय में)। हालांकि, पूरा ट्रेन सेट पढ़ना बहुत धीमा है और हमेशा पढ़ने के लिए (मैंने कुछ घंटों तक इंतजार किया है) पढ़ने के लिए और question here में दिखाए गए कार्यों के लिए एक बाधा बन गई है।
मैं भी json फ़ाइलें जो जनरेटर समझ के बजाय सूची समझ का उपयोग करने से this question here
UPDATE 1 जाहिर देखा जा सकता है पार्स करने में गति प्रयोजनों के लिए ujson
उपयोग कर रहा हूँ।
data_list=(json.load(open(file)) for file in all_files)
ऐसा लगता है कि आपके पास पर्याप्त रैम नहीं है, और यह SWAP का उपयोग करना शुरू कर देता है, सबसे आसान समाधान अधिक रैम प्राप्त करना होगा। –
@ फ्रांसिस्कोकोज़ शायद सबसे आसान .. लेकिन निश्चित रूप से सबसे सस्ता नहीं! : डी – dizzyf
मेरे पास पहले से ही 16 गीगा हैं और मुझे लगता है कि इस तरह एक सामान्य डेटासेट पढ़ने के लिए निश्चित रूप से पर्याप्त है। क्या इतनी सारी जेसन फाइलें पढ़ने का बेहतर तरीका है? – TJain