start = time.perf_counter()
res2 = pl.collect_all(res)
res3 = res2[0]
for i in range(1, 50):
res3 = res3.join(res2[i], on=["a", "b"])
time.perf_counter() - start
< /code>
Option 2: < /p>
start = time.perf_counter()
res4 = res[0]
for i in range(1, 50):
res4 = res4.join(res[i], on=["a", "b"])
res4 = res4.collect()
time.perf_counter() - start
Option 1 sammelt_all zuerst alle einzelnen Datenrahmen an. Meine Benchmarking -Ergebnisse zeigen jedoch, dass Option 2 Option 2 doppelt so lang wie Option 1 (21s gegenüber 10s auf meinem System mit 32 Kernen) . Oder gibt es einige Ineffizienzen in Bezug auf den Ansatz, den ich gewählt habe? Aber aus meinem Experiment wird die Leistung durch viel geopfert. fragt sich, ob es eine Möglichkeit gibt, so etwas wie Option 2 zu tun, ohne die Leistung zu beeinträchtigen (Leistung vergleichbar mit Option 1)?
dfs = [ pl.DataFrame( { "id": np.random.randint(0, n_index, size=n_obs), "a": np.random.randint(0, n_a, size=n_obs), f"b_{i}": np.random.randint(0, n_b, size=n_obs), "x": np.random.normal(0, 1, n_obs), } ).lazy() for i in range(50) ]
res = [ df.join( dfs[i], left_on=["id", "a", "b"], right_on=["id", "a", f"b_{i}"], how="inner" ) .group_by("a", "b") .agg((pl.col("x") * pl.col("x_right")).sum().alias(f"x_{i}")) for i in range(50) ] < /code> Die Aufgabe verarbeitet wirklich verschiedene Datenrahmen, führen einige Berechnungen auf und verbinden Sie dann alle Ergebnisse. Der obige Code erstellt res [/code], der alle Ergebnisse als Liste enthält.[code]start = time.perf_counter() res2 = pl.collect_all(res) res3 = res2[0] for i in range(1, 50): res3 = res3.join(res2[i], on=["a", "b"]) time.perf_counter() - start < /code> Option 2: < /p> start = time.perf_counter() res4 = res[0] for i in range(1, 50): res4 = res4.join(res[i], on=["a", "b"]) res4 = res4.collect() time.perf_counter() - start [/code] Option 1 sammelt_all zuerst alle einzelnen Datenrahmen an. Meine Benchmarking -Ergebnisse zeigen jedoch, dass [b] Option 2 Option 2 doppelt so lang wie Option 1 (21s gegenüber 10s auf meinem System mit 32 Kernen) [/b]. Oder gibt es einige Ineffizienzen in Bezug auf den Ansatz, den ich gewählt habe? Aber aus meinem Experiment wird die Leistung durch viel geopfert. [b] fragt sich, ob es eine Möglichkeit gibt, so etwas wie Option 2 zu tun, ohne die Leistung zu beeinträchtigen (Leistung vergleichbar mit Option 1)? [/b]
Ich habe einen LazyFrame in Python und möchte IT -Spalten von einem anderen LazyFrame hinzufügen. Die beiden LazyFrames haben die gleiche Anzahl von Zeilen und verschiedenen Spalten. > def...
Da ich in Python nicht „nativ“ bin, habe ich bool(prod( ... ) verwendet, um zu überprüfen, ob alle Elemente in einer Liste mit booleschen Werten True sind. Ich habe die Eigenschaft genutzt , diese...
Wenn ich eine Liste von Dateien habe, l = mit den Größen S1, S2, ..., Sn und ich erstelle einen df mit df = pl.scan_csv (l, ...) oder df = pl.Scan_Parquet (l, l. d.h. ?
Das Problem hängt möglicherweise mit und der stapelweisen Verarbeitung von Python Polars LazyFrame zusammen
Mein Setup ist
input = pathlib.Path( input.csv ) # 300k lines
output = pathlib.Path(...