ile karşılaştırıldığında çok uzun zaman alır. Hafızada yüklendiğinde yaklaşık olarak 30m satır, 6 sütun, yaklaşık 2gb gibi oldukça büyük bir mysql tablom var.Mysql tablosunu python'a yükleme işlemi, R
Hem python hem de R ile çalışıyorum. R'de, tabloyu belleğe yükleyebilirim ve yaklaşık 90 saniye sürer. Ama pythonda 40 dakika sürer.
Hem sqlalchemy hem de düz pymysql ile denedim. Kod sqlalchemy ile, örneğin, basittir:
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 olmadan:
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()
Her iki şekilde de bana çok mantıklı değil R, çok daha yavaş, fazla. Neden bu, ve hızlandırmak için herhangi bir yolu var mı? Bir hack bile yapardı.
Eklemek gerekirse, pandaların bu kadar uzun sürecek bir ilgisi yoktur. İkinci kod snippet'inde, list(cursor)
'u sadece bir DataFrame pandasına yerleştirmek yerine döndürürsem, (temelde) uzun sürüyor.
Açık Düzenleme: DB, R/Python ile aynı makinede çalışıyor, bu nedenle her şey çıktı açısından aynı olmalıdır.
UR yılındaDBI kullanıyorum ve kullandığım R kodudur (temelde) bu:
ÇÖZÜLDÜrequire(DBI)
cnx <- dbConnect(dbDriver("MySQL"),dbname="database",username="user",password="pass",host="host")
table <- dbGetQuery(cnx,"select * from my_table")
******** (ÇOK) ********
Özellikle @roganjosh'dan gelen yararlı yorumlar sayesinde, sorunun nedeni, varsayılan mysql bağlayıcının C yerine python ile yazılmasıdır, bu da onu çok yavaşlatır. Çözüm, doğal bir C konektörü olan MySQLdb
kullanmaktır. MySQLdb
sadece Ancak piton 2. desteklenir çünkü Kobrayla piton 3 çalıştıran benim özel kurulumda
, bu isimle mysqlclient
altında piton 3 MySQLdb
bir uygulamasıdır, orada mümkün değildi.
Bu uygulamayı kullanarak, tüm tabloyu okumak için yaklaşık 5 dakikaya kadar, R kadar hızlı değil, 40'tan çok daha kısa bir süre geçiyor.
Dönüştürmeyi pandalar veri çerçevesine ayırırdım ancak bu gerçekten ilginç –
İyi bir nokta, bunu yaptım. Bu pandalar dönüşümü değil. Sadece satırların listesini almak yaklaşık 40 dakika sürmektedir. – mrip
Ağ var mı? Veritabanınız açıkken aynı makinede komut dosyasını çalıştırıyor musunuz? – alecxe