Parallel Zuweisen von verkettenden JMP-Tabellen innerhalb einer for-SchleifeIch habe mehrere Ordner und in jedem Ordner befinden sich mehrere CSV-Dateien. Jede CSV-Datei enthält ungefähr 500.000 Zeilen. Ich verwende ein JSL-Skript, um alle CSV-Dateien in jedem Ordner in einer JMP-Tabelle zu verketten. Dieser Vorgang wird für jeden Ordner wiederholt und daher gibt es am Ende so viele verkettete JMP-Tabellen wie die Anzahl der Ordner. Aber es braucht viel Zeit.
Ich suchte in JSL nach paralleler Programmierung und lernte Parallel Assign kennen. Ich benötige eine Anleitung, wie Sie das folgende Skript in Parallel Assign einfügen können, um die Verkettung zu beschleunigen. Ich werde es sehr schätzen.
path = munger(Pick Directory( "Browse to the Directory of the .txt / .csv files " ),1,"/","");
Print(dirList(path));
folderlist={};
folderlist = dirList(path);
count=nitems(folderlist);
//prefolderlist = Files In Directory( path );
//filepath = Convert File Path(path, Windows )
For( j2 = 1, count >= j2, j2++,
folderpath= path || folderlist[j2] || "/" ;
Print(folderpath);
prefilelist = Files In Directory( folderpath );
n2=nitems(prefilelist);
filelist = {};
//filter out any non-txt or csv files
For( i2 = 1, n2 >= i2, i2++,
file=(prefilelist[i2]);
If( Item( 2, prefilelist[i2], "." ) == "txt" | Item( 2, prefilelist[i2], "." ) == "csv",
Insert Into( filelist,file),
show(file)
)
);
nf=nitems(filelist); //number of items in the working list
cctable= New Table( "Combined data table ");//make an empty table
cctable<<New Column( "Source", Character, Nominal );
For( iii = 1 , iii <= nf, iii++, //this starts the first loop
filenow = ( filelist[iii] );
fileopen=(folderpath||filenow);
//dt=open(fileopen,private);
dt=open(fileopen,importset,private);//Import settings used in the open argument
New Column( "Source", Character, Nominal );
:Source << set each value( filenow );
//dt<<new column("Source", character, nominal)<<set each value(9999);
dt << Run Formulas();
//add the current table to the bottom of the combined data table
cctable << Concatenate( Data Table( dt ), Append to first table );
//don't use "Create Source Column" argument
Close( dt, NoSave );//after concatenating the table, close it and move on
);//end of the first for loop
);SkriptingBetreff: Parallel Weisen Sie verkettete JMP-Tabellen innerhalb einer for-Schleife zuSchauen Sie sich Datei-> MultipleFileImport an. Es kann verschachtelte Verzeichnisse durchsuchen, anhand von Dateinamenmustern auswählen und ähnliche Dateien verketten. Und es ist schneller als die Verwendung von open () in einer CSV, normalerweise sogar für eine einzelne Datei. Außerdem wird ein Skript erstellt, das Sie ändern und wiederverwenden können. Es kann eine Spalte mit Informationen zur Quelldatei hinzugefügt werden.
Starten Sie interaktiv, suchen Sie nach dem Kontrollkästchen, um das Fenster offen zu halten, und führen Sie einige Experimente durch.
Die GUI verfügt über vier Filter, die die ausgewählten Dateien auswählen.Der Filter für Ordner / versteckt / rekursiv ist immer sichtbar, und es gibt drei Kontrollkästchen, die angezeigt werden können aktivieren Filter für Dateiname, Dateizeit und Dateigröße. Die Dateiliste zeigt, was ausgewählt ist. es ist nicht zur Auswahl von Dateien.
Im schlimmsten Fall können Sie MFI für jedes Verzeichnis einzeln verwenden und erhalten wahrscheinlich eine gute Beschleunigung. Im besten Fall kann es im gesamten Verzeichnisverzeichnis das tun, was Sie wollen.
Parallel Assign dient zum Ausfüllen eines Arrays UND zum Ausführen der JSL, die jedes Array-Element in einer isolierten Umgebung ausfüllt, um Fehler zwischen Threads zu vermeiden. Es wird versucht, den gleichzeitigen Zugriff auf eine Datentabelle von zwei verschiedenen Threads aus zu vermeiden. Wenn Sie einen Weg dorthin finden, wird es wahrscheinlich abstürzen.
Betreff: Parallel Weisen Sie verkettete JMP-Tabellen innerhalb einer for-Schleife zuIch danke dir sehr. Ich konnte mehrere Dateien in mein Skript importieren und jetzt können Tabellen viel schneller verkettet werden.