Ich habe mehrere CSV-Dateien mit 10 Millionen + Werten in ihnen, jeder Wert ist 9 Zeichen lang. Mein Ziel ist es, jede Datei in zwei gleich große Dateien zu unterteilen, wobei jede Hälfte eine zufällige Auswahl der Werte aus der ursprünglichen Menge ist.Wie man große Datenmengen zufällig in zwei gleich große Datensätze trennt
Ich denke darüber nach, dies mit PHP zu tun (weil ich ein wenig damit vertraut bin).
Ich kann mir zwei mögliche Wege vorstellen, aber neugierig auf (1) welche wird schneller laufen? (2) Gibt es eine andere Art zu tun, die besser ist? (3) oder mit einem Datensatz von etwa 10 bis 15 Millionen spielt es keine Rolle?
Plan 1:
- Convert CSV in ein Array
- Mische das Array mit den shuffle() Funktion
- Dividieren der Array in 2 mit dem array_chunk() Funktion
- Speichern jedes Array in eine CSV-Datei (nicht sicher, wie aber wird es herauszufinden)
Plan 2:
- Convert CSV in ein Array
- Verwendung array_rand(), um zufällig X Menge von Werten auswählen, wobei X = (Anzahl der Werte/2), und
- Wiederholen Sie Schritt 2 für die zweite aus dieser Auswahl Array erstellen die Hälfte der Werte
- Speicher jedes des neuen Arrays CSV
Ist das irgendwo in der Nähe richtige Datei? Soll ich eine andere Sprache betrachten?
Vielen Dank! 3
Wenn die Dateien so groß sind, vergessen Sie die Verwendung von Arrays (zu hoher Speicherbedarf) .... Erstellen Sie eine temporäre Datenbanktabelle, laden Sie die Daten in diese und behandeln Sie alle Randomisierung durch die Datenbank vor dem Schreiben in Datei –
Server haben den Speicher, um 90 Millionen Zeichen in einem Array zu speichern? –
schnellste/einfachste Weg ist über Linux-Shell-Befehle 'wc -l-Datei', um # von Zeilen und 'split -l X-Datei' zu erhalten, wobei X ist ~ Hälfte, was der WC-Befehl gab Ihnen. Viele "Split" -Beispiele, wie dieses ... http://www.howtogeek.com/howto/ubuntu/split-a-text-file-in-half-o-anyany-percentage-on-ubuntu- linux/ –