Parallele Zuweisung verketteter JMP-Tabellen innerhalb einer for-SchleifeIch habe mehrere Ordner und in jedem Ordner befinden sich mehrere CSV-Dateien. Jede CSV-Datei hat etwa 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 Ordner vorhanden sind. Aber es braucht viel Zeit.
Ich habe nach paralleler Programmierung in JSL gesucht und bin auf Parallel Assign aufmerksam geworden. Ich benötige eine Anleitung, wie ich das folgende Skript in Parallel Assign einfügen kann, um die Verkettung zu beschleunigen. Ich werde es sehr zu schätzen wissen.
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
);Automatisierung und SkripterstellungInhaltsorganisationBetreff: Parallel Assign verkettete JMP-Tabellen innerhalb einer for-SchleifeVielen Dank. Ich konnte „Mehrere Dateien importieren“ in mein Skript integrieren und kann Tabellen jetzt viel schneller verketten.
Betreff: Parallel Assign verkettete JMP-Tabellen innerhalb einer for-SchleifeSchauen Sie sich File->MultipleFileImport an. Es kann verschachtelte Verzeichnisse durchsuchen, nach Dateinamenmustern auswählen und ähnliche Dateien verketten. Und es ist schneller als die Verwendung von open() für eine 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 Quelldateiinformationen hinzugefügt werden.
Beginnen Sie interaktiv, suchen Sie nach dem Kontrollkästchen, um das Fenster geöffnet zu halten, und führen Sie ein paar Experimente durch.
Die GUI verfügt über vier Filter, die die ausgewählten Dateien auswählen.Der Filter „Ordner/versteckt/rekursiv“ ist immer sichtbar und es gibt drei Kontrollkästchen zum Anzeigen und aktivieren die Filter für Dateiname, Dateizeit und Dateigröße. Die Dateiliste zeigt, was ausgewählt ist; es ist nicht zum Auswählen von Dateien.
Im schlimmsten Fall können Sie MFI für jedes Verzeichnis einzeln verwenden und wahrscheinlich eine schöne Geschwindigkeitssteigerung erzielen. Im besten Fall könnte es für das gesamte Verzeichnisnest 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 verhindern. Es versucht, Dinge wie den gleichzeitigen Zugriff auf eine Datentabelle von zwei verschiedenen Threads aus zu vermeiden. Wenn Sie einen Weg dorthin finden, wird es wahrscheinlich abstürzen.