Ich möchte etwa 700 Millionen Zeilen und 2 Spalten an eine Datenbank anhängen. Mit dem folgenden Code:Wie die Zeit zu reduzieren, die es dauert, an SQL-Datenbank in Python zu hängen
disk_engine = create_engine('sqlite:///screen-user.db')
chunksize = 1000000
j = 0
index_start = 1
for df in pd.read_csv('C:/Users/xxx/Desktop/jjj.tsv', chunksize=chunksize, header = None, names=['screen','user'],sep='\t', iterator=True, encoding='utf-8'):
df.to_sql('data', disk_engine, if_exists='append')
count = j*chunksize
print(count)
print(j)
Es dauert eine sehr lange Zeit (ich schätze, es würde Tage dauern). Gibt es einen effizienteren Weg, dies zu tun? In R habe ich das data.table-Paket verwendet, um große Datensätze zu laden, und es dauert nur 1 Minute. Gibt es ein ähnliches Paket in Python? Als tangentialer Punkt möchte ich diese Datei auch physisch auf meinem Desktop speichern. Momentan gehe ich davon aus, dass Daten als temporäre Datei gespeichert werden. Wie würde ich das tun?
Auch vorausgesetzt, ich lade die Daten in eine Datenbank, möchte ich die Abfragen in einer Minute oder weniger ausführen. Hier einige Pseudo-Code von dem, was ich tun möchte, mit Python + SQL:
#load data(600 million rows * 2 columns) into database
#def count(screen):
#return count of distinct list of users for a given set of screens
Im Grunde bin ich die Anzahl der Bildschirme für einen bestimmten Satz von users.Is Rücksendung der Daten zu groß für diese Aufgabe? Ich möchte diese Tabelle auch mit einer anderen Tabelle zusammenführen. Gibt es einen Grund, warum die Freed-Funktion in R viel schneller ist?
Gotcha, also verwenden Sie SQLite. Zu Ihrer Frage "gibt es ein Python-Äquivalent zu R-Datentabellen". Pandas ist diese Bibliothek. Der langsame Teil Ihres Codes ist das Schreiben der Datenbank. Können Sie die verschiedenen Benutzer nicht von der Variablen 'df' selbst zählen? Warum brauchst du SQL? –
Ich nahm an, eine Datenbank wäre schneller Abfragen auszuführen. Wie würde ich als neuer Benutzer von python die Datensätze für df sehen? Wenn ich (df) drucke, erhalte ich den Objektnamen, und ich dachte, dass das Schreiben der Daten in SQL db in Bezug auf das Schreiben von Abfragen einfacher wäre und ich auch die Ausgabe meiner Tabelle sehen könnte. Außerdem bin ich nicht sicher, wie lange es dauern würde, um die Daten in meiner pd.read_csv-Anweisung zu laden. – zorny
Es wäre wahrscheinlich viel einfacher, die Abfrage selbst in SQL zu schreiben, ja, aber wie Sie festgestellt haben, ist das Laden von Daten in eine Datenbank langsam.Persönlich würde ich empfehlen, dass Sie in [SparkSQL] (http://spark.apache.org/docs/latest/sql-programming-guide.html#overview) schauen und sich Sorgen machen, später in eine Datenbankdatei zu schreiben. –