Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL से अजगर/पांडा/सुन्न सरणी में संख्यात्मक डेटा लोड करने का सबसे तेज़ तरीका

ऐसा लगता है कि "समस्या" प्रकार रूपांतरण है जो MySQL के दशमलव प्रकार से पायथन के दशमलव तक होता है। दशमलव जो MySQLdb, pymysql और pyodbc डेटा पर करता है। कन्वर्टर्स.py फ़ाइल को बदलकर (आखिरी पंक्तियों में) MySQLdb में रखने के लिए:

conversions[FIELD_TYPE.DECIMAL] = float
conversions[FIELD_TYPE.NEWDECIMAL] = float

दशमलव के बजाय। दशमलव पूरी तरह से समस्या को हल करने लगता है और अब निम्नलिखित कोड:

import MySQLdb
import numpy
import time

t = time.time()
conn = MySQLdb.connect(host='',...)
curs = conn.cursor()
curs.execute("select x,y from TABLENAME")
data = numpy.array(curs.fetchall(),dtype=float)
print(time.time()-t)

एक सेकंड से भी कम समय में चलता है! क्या अजीब है, दशमलव। दशमलव कभी भी प्रोफाइलर में समस्या नहीं दिखाई दी।

इसी तरह का समाधान pymysql पैकेज में काम करना चाहिए। pyodbc अधिक कठिन है:यह सब C++ में लिखा गया है, इसलिए आपको पूरे पैकेज को फिर से संकलित करना होगा।

अपडेट करें

यहाँ एक समाधान है जिसके लिए MySQLdb स्रोत कोड को संशोधित करने की आवश्यकता नहीं है:पायथन MySQLdb datetime.date और दशमलव लौटाता है तब समाधान संख्यात्मक डेटा को पांडा में लोड करने के लिए:

import MySQLdb
import pandas.io.sql as psql
from MySQLdb.converters import conversions
from MySQLdb.constants import FIELD_TYPE

conversions[FIELD_TYPE.DECIMAL] = float
conversions[FIELD_TYPE.NEWDECIMAL] = float
conn = MySQLdb.connect(host='',user='',passwd='',db='')
sql = "select * from NUMERICTABLE"
df = psql.read_frame(sql, conn)

200k x 9 टेबल लोड करने में MATLAB को ~4 के कारक से मात देता है!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. टेक्स्ट/ब्लॉब को एक ही टेबल में स्टोर करें या नहीं?

  2. MySQL में आवृत्ति से पर्सेंटाइल की गणना करें

  3. MySQL तालिका किसी कारण से 10 से बढ़ रही है

  4. एक mysql_connect () से एक PHP पीडीओ कनेक्शन प्राप्त करना?

  5. यदि मौजूद नहीं है तो उपयोगकर्ता बनाने के अनुकरण के साथ सिंटेक्स त्रुटि