Vinnaren i pepparkakshustävlingen!
2023-07-17, 22:40
  #13
Moderator
vhes avatar
Citat:
Ursprungligen postat av Kip.Kinkel
Data genereras av en brute force optimeringsalgoritm (inte gradient descent utan random alltså). Fält/kolumner är enligt följade:

description (string), intercept (double), coefficients_x1, x2, x3... xn (double), epsilon (double)

---> sortera i fallande ordning efter x1.

Antingen sorteras bara ett subset, eller så blir det synbart slumpmässig sortering.

Kan man anta att kommatecken bara förekommer som separator-tecken? I så fall så tycker jag följande ser ut att funka bra (testade på en 10 miljoner rader lång fil jag genererade lite snabbt):
Kod:
sort -k3 -n -r -t, < data.csv > sorted.csv

Exempel:
Kod:
$ head -5 data.csv 
endearment's,gofer,8435367
spade,understudy,7956913
perimeter,gunsmiths,4436220
touchstone,sidesaddle,9713335
pitiable,esplanade,1383317
$ 
$ head -5 sorted.csv 
Spitsbergen's,institutionalizes,9999999
packer,truths,9999998
pushy,wittingly,9999997
candelabra's,birthright,9999996
lily,fare,9999995
$ 
$ tail -5 sorted.csv 
extremity's,aquamarines,4
Horthy's,recapturing,3
vistas,Refugio's,2
page's,syllabus,1
vindicates,Vilnius,0
$ 

[edit]: Går afk, men tippar att ditt problem är att du har kommatecken i textfältet i kolumn 1. Försök ha en separator som är unik, om du envisas med CSV-filer.
__________________
Senast redigerad av vhe 2023-07-17 kl. 22:44.
Citera
2023-07-17, 22:45
  #14
Medlem
Kip.Kinkels avatar
Citat:
Ursprungligen postat av vhe
Kan man anta att kommatecken bara förekommer som separator-tecken? I så fall så tycker jag följande ser ut att funka bra (testade på en 10 miljoner rader lång fil jag genererade lite snabbt):
Kod:
sort -k3 -n -r -t, < data.csv > sorted.csv

Exempel:
Kod:
$ head -5 data.csv 
endearment's,gofer,8435367
spade,understudy,7956913
perimeter,gunsmiths,4436220
touchstone,sidesaddle,9713335
pitiable,esplanade,1383317
$ 
$ head -5 sorted.csv 
Spitsbergen's,institutionalizes,9999999
packer,truths,9999998
pushy,wittingly,9999997
candelabra's,birthright,9999996
lily,fare,9999995
$ 
$ tail -5 sorted.csv 
extremity's,aquamarines,4
Horthy's,recapturing,3
vistas,Refugio's,2
page's,syllabus,1
vindicates,Vilnius,0
$ 

Citat:
sort -k3 -n -r -t, < data.csv > sorted.csv

Exakt detta har jag redan prövat i bash. Fungerade inte. Testade också med UHF(?) utan framgång. Om du inte bara ser på head och tail, ser data korrekt sorterad ut över hela sample space?
Citera
2023-07-17, 22:48
  #15
Medlem
Kip.Kinkels avatar
Citat:
Ursprungligen postat av vhe
[edit]: Går afk, men tippar att ditt problem är att du har kommatecken i textfältet i kolumn 1. Försök ha en separator som är unik, om du envisas med CSV-filer.

Det ska jag absolut kolla upp! Tack och bock!
Citera
2023-07-17, 22:51
  #16
Avstängd
Citat:
Ursprungligen postat av Kip.Kinkel
C borde klara detta eftersom C bygger andra system. Varför måste man ha en relationsdatabas för att sortera ett stort antal data? Det passar in dåligt i den struktur jag tänkt mig.

Nej, man kan inte göra i c allt som man kan göra i system byggda i c. Inte utan att bygga dessa system.

Det är rätt basic så vi kan släppa du nu. Använd du c istället för mysql.
Citera
2023-07-17, 22:53
  #17
Medlem
Kip.Kinkels avatar
Citat:
Ursprungligen postat av kalle632
Nej, man kan inte göra i c allt som man kan göra i system byggda i c. Inte utan att bygga dessa system.

Det är rätt basic så vi kan släppa du nu. Använd du c istället för mysql.

Har du någon källa som styrker att C inte klarar av att sortera ynka 10 miljoner rader csv? Programmeringsspråket används ju bare bones i fysiksimuleringar med mera.
Citera
2023-07-17, 23:05
  #18
Medlem
Tror nästan du måste läsa in i chunks för att behandla ett sånt stort dataset. Blir svårt att sortera och hålla allt i minnet dock. Finns iofs Dask för python men enklast är nog att importera filen i en databas som andra redan konstaterat.
Citera
2023-07-17, 23:07
  #19
Medlem
Kottkompotts avatar
jag körde pandas på något i liknande storlek, och det tog inte så länge.
Runt minuten om jag inte missminner mig.

Gjorde det då med python.
Citera
2023-07-17, 23:09
  #20
Medlem
Kip.Kinkels avatar
Citat:
Ursprungligen postat av Fetvard
Tror nästan du måste läsa in i chunks för att behandla ett sånt stort dataset. Blir svårt att sortera och hålla allt i minnet dock. Finns iofs Dask för python men enklast är nog att importera filen i en databas som andra redan konstaterat.

Tror du det?

Sedan kan jag inte förstå varför både C och Bash hellre spottar ut en felaktig sortering än att göra en core dump (C) eller dylik motsvarighet till det aktuella problemet.

Edit: vad tror du angående att använda pthreads i POSIX?
Citera
2023-07-17, 23:14
  #21
Medlem
Kip.Kinkels avatar
Citat:
Ursprungligen postat av Kottkompott
jag körde pandas på något i liknande storlek, och det tog inte så länge.
Runt minuten om jag inte missminner mig.

Gjorde det då med python.

Ska testa Python, men om man inte använder numpy arrays eller liknande (som ändå bygger på C) så blir det nog svårt att få en rimligt snabb sortering av data. Det kan som sagt hända att jag behöver sortera miljardtals rader.
Citera
2023-07-17, 23:19
  #22
Medlem
Citat:
Ursprungligen postat av Kip.Kinkel
Tror du det?

Sedan kan jag inte förstå varför både C och Bash hellre spottar ut en felaktig sortering än att göra en core dump (C) eller dylik motsvarighet till det aktuella problemet.

Edit: vad tror du angående att använda pthreads i POSIX?

Vet faktiskt inte om det hjälper med fler trådar, är det inte minnet som flaskhalsar? I vilket fall hade jag nog använt python / SQL, en sån lösning är kanske inte den bäst presterande eller mest elegant men den ger dig nog resultat snabbare än nåt hemmaknåp.
Citera
2023-07-17, 23:27
  #23
Medlem
henrikos avatar
Citat:
Ursprungligen postat av Kip.Kinkel
Jag ska sortera en csv-fil med blandade data i sjunkande ordning efter den tredje (numeriska) kolumnen. Vill ha hela de sorterade raderna printade till terminalen eller sparade i en csv-fil. Jag har prövat massvis av algoritmer i C och Bash, men det fungerar inte. När jag granskar filen med cat eller i en texteditor, så sorteras bara ett subset av all data. Ibland sorteras inte data alls. Om jag testar algoritmerna på typ 1000 observationer så fungerar det bra, men inte med dessa större datamängder. Vad är det som går fel? Min aspergerskalle håller på att explodera!

Är datamängderna riktigt stora så är det nog många verktyg som inte fungerar så bra.

Eftersom du inte skriver exakt vad du provat och vad som gick snett så är det ju svårt att hjälpa till. Men tex GNU sort ska klara att sortera stora datamängder. Men eventuellt kan du behöva sätta parametern --temporary-directory .

Skulle jag göra detta utan att ta hjälp från något lämpligt färdigt verktyg så skulle jag prova att göra det i två steg.

Först bygga en tabell med enbart sorteringsnyckeln (tredje kolumnen) och teckenposition på första tecknet på hela raden. Denna tabell kan då, om den inte innehåller texterna och onödiga fält, utan bara består av två heltal, med lite tur hållas helt i RAM, så att du kan sortera den i ett svep utan en massa I/O och olika trädindelningar.

Därefter kan du gå igenom den sorterade listan från början till slut, och för varje post hoppa till rätt position i originalfilen och läs in raden där, och skriv ner raden på slutet i en ny fil.
Citera
2023-07-17, 23:27
  #24
Medlem
Kip.Kinkels avatar
Citat:
Ursprungligen postat av Fetvard
Vet faktiskt inte om det hjälper med fler trådar, är det inte minnet som flaskhalsar? I vilket fall hade jag nog använt python / SQL, en sån lösning är kanske inte den bäst presterande eller mest elegant men den ger dig nog resultat snabbare än nåt hemmaknåp.

Hmmm. Jag håller med. Det här börja låta mer och mer som ett minnesproblem. MySQL blir en snabb lösning ur ett exekveringsperspektiv, definitivt, men idealet hade varit om jag själv hade kunnat implementera koden i C, eller i andra hand i Bash. Bash kanske inte är så realistiskt? Det fanns ju en användare (mod) i tråden som lyckades sortera 10M data records i bash. Han var inne på förekomsten av separatortecken i det första deskriptionsfältet i csv. Ska kolla upp detta senare. Ni gubbar är guld värda, tack för alla tips, och tar gärna emot fler!
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback