की तुलना में मैं एक काफी बड़े mysql तालिका, 30M के बारे में पंक्तियाँ, 6 कॉलम, 2GB के बारे में जब मेमोरी में लोड है एक बहुत लंबे समय लेता है।लोड हो रहा है mysql तालिका आर
मैं दोनों अजगर और आर आर में साथ काम करते हैं, मैं स्मृति में तालिका लोड कर सकते हैं और यह के बारे में 90 सेकंड लेता है। लेकिन अजगर में 40 मिनट लगते हैं।
मैं इसे दोनों SQLAlchemy के साथ और सादे pymysql साथ की कोशिश की है। कोड सीधा है, उदाहरण के लिए, SQLAlchemy के साथ:
db_engine = sqlalchemy.create_engine("mysql+pymysql://user:[email protected]/database")
cnx = db_engine.connect()
table = pd.read_sql('select * from my_table',cnx)
cnx.close()
SQLAlchemy के बिना:
cnx = mysql.connector.connect(**db_details)
cursor = cnx.cursor()
cursor.execute('select * from my_table')
table = pd.DataFrame(data=list(cursor),columns = cursor.column_names)
cnx.close()
किसी भी तरह से, यह बहुत, अनुसंधान, जो मेरे लिए बहुत मतलब नहीं है की तुलना में काफी धीमी है। यह क्यों है, और इसे गति देने का कोई तरीका है? यहां तक कि एक हैक भी करेगा।
जोड़ने के लिए, पांडा यह बहुत देर लेने के साथ कोई लेना देना नहीं है। दूसरे कोड स्निपेट में, अगर मैं इसे list(cursor)
पर वापस लाने के बजाय इसे एक पांडा डेटाफ्रेम में डाल देता हूं, तो यह केवल (लंबे समय तक) लेता है।
संपादित करें पर: डीबी आर/अजगर के रूप में एक ही मशीन पर चल रहा है, तो सब कुछ प्रवाह के मामले में समान होना चाहिए।
आरआई में DBI उपयोग कर रहा हूँ, और आर कोड मैं का उपयोग करें (मूल रूप से) यह:
require(DBI)
cnx <- dbConnect(dbDriver("MySQL"),dbname="database",username="user",password="pass",host="host")
table <- dbGetQuery(cnx,"select * from my_table")
******** यह संकल्प (अधिकतर) ********
मददगार टिप्पणियाँ, विशेष रूप से @roganjosh से के लिए धन्यवाद, यह प्रतीत होता है कि इस मुद्दे को डिफ़ॉल्ट mysql संबंधक बल्कि सी है, जो यह बहुत धीमी गति से बनाता से अजगर में लिखा है कि। समाधान MySQLdb
का उपयोग करना है, जो मूल सी कनेक्टर है। क्योंकि MySQLdb
केवल अजगर 2. में समर्थित है हालांकि
मेरी विशेष सेटअप में, एनाकोंडा के साथ अजगर 3 चल रहा है, यह संभव नहीं था, नाम mysqlclient
तहत अजगर 3 के लिए MySQLdb
के एक कार्यान्वयन है।
इस कार्यान्वयन का उपयोग करना अब पूरे टेबल को पढ़ने के लिए लगभग 5 मिनट तक है, आर जितना तेज़ नहीं है, लेकिन 40 से कम या इससे पहले कि यह पहले ले रहा था।
मैं एक पांडा डेटाफ्रेम में रूपांतरण को अलग कर दूंगा लेकिन यह वास्तव में दिलचस्प है –
अच्छा बिंदु, मैंने ऐसा किया। यह पांडा रूपांतरण नहीं है। बस पंक्तियों की सूची प्राप्त करने में लगभग 40 मिनट लगते हैं। – mrip
क्या नेटवर्क शामिल है? क्या आप उसी डेटाबेस पर स्क्रिप्ट निष्पादित कर रहे हैं जैसे आपका डेटाबेस चालू है? – alecxe