Post content
πΠΠ°ΠΌΠ΅ΡΠΊΠ° ΠΎΡ ΡΠΈΡΠ°ΡΠ΅Π»Ρ@nencoru ΠΠ°ΠΊ ΡΠΌΠ΅ΡΠΆΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ Π² ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ», ΡΠΎΠΆΠ΅ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ? πΈ ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ°ΠΉΠ»: β«οΈ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΎΠ΄Π½Π° Π·Π°ΠΏΠΈΡΡ β«οΈ Π·Π°ΠΏΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎΠ΅ ΠΏΠΎΠ»Π΅ Ρ Π½Π΅ΠΊΠΈΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π»ΠΎΠ³ΠΈ Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. β«οΈ Π²ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ°ΠΉΠ»Π΅ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΠ»Ρ πΈ ΠΠ°Π΄Π°ΡΠ°: Π‘ΠΌΠ΅ΡΠΆΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΊΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π² ΡΠΈΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Π²ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π±ΡΠ»ΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Ρ. πΈ Π Π΅ΡΠ΅Π½ΠΈΠ΅ 1: ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ ΠΌΠ΅Π½Ρ JSON-Π»ΠΎΠ³ΠΈ files = ['file1.jsonl', 'file2.jsonl', ...] data = [] for file in files: with open(file) as f: data.expand( f.readlines() ) data.sort(key=lambda line: json.loads(line)['timestamp']) with open('merged.jsonl', 'w') as f: f.writelines(data) Π£ΡΠ»ΠΎΠΆΠ½ΠΈΠΌ Π·Π°Π΄Π°ΡΡ β ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° 5Gbπ± ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ 5*len(files) Gb. Π ΡΠΆΠ΅ Π½Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ ΡΠΌΠΎΠΆΠ΅Ρ ΡΠΌΠ΅ΡΠΆΠΈΡΡ 3-4 ΡΠ°ΠΊΠΈΡ ΡΠ°ΠΉΠ»Π°. Π Π΅ΡΠ»ΠΈ ΠΈΡ 100? fileinput ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΊΡΠ°ΡΠΈΠ²ΡΠΉ ΠΊΠΎΠ΄, Π½ΠΎ Ρ ΠΏΠ°ΠΌΡΡΡΡ Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ. πΈ Π Π΅ΡΠ΅Π½ΠΈΠ΅ 2: ΠΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³ΠΎΡΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΡ heapq.merge() ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ heapq! Heap - ΡΡΠΎ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² Π΄Π΅ΡΠ΅Π²Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅Π½ΡΡΠ΅Π΅ ΡΠ΅ΠΌ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ. Π’ΠΎ Π΅ΡΡΡ, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠ°ΠΊ-Π»ΠΈΠ±ΠΎ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Ρ. from heapq import merge items = [ [3,2,6], [1,5,4] ] print(list(merge(*items))) # [1, 2, 3, 4, 5, 6] Π ΡΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ merge ΡΡΠΎ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ, ΡΠΌΠ΅Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΈ Π΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΎΠ½ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ Π΄Π»Ρ Π½Π°ΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π² ΠΏΠ°ΠΌΡΡΡ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ! Π ΡΡΡ Π²Ρ ΡΠΏΡΠΎΡΠΈΡΠ΅: ΡΡΠΎ Π·Π° ΠΌΠ°Π³ΠΈΡ? Π’ΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π±Π΅Π· ΡΠ°ΡΡ ΠΎΠ΄Π° ΠΏΠ°ΠΌΡΡΠΈ? ΠΠΎΠ»ΡΠ΅Π±Π½ΡΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π²ΡΠ΅Ρ ΡΠΏΠ°ΡΡΡ? ΠΠ΅Ρ, Π·Π° Π²ΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠ»Π°ΡΠΈΡΡ. Π ΡΠ»ΡΡΠ°Π΅ Ρ heapq Π²Π΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ Π΄ΡΠ°ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡΡΡ. ΠΠΎ Π·Π°Π΄Π°ΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π°! π Π‘Π΄Π΅Π»Π°Π» Π΄Π»Ρ Π²Π°Ρ ΡΠΈΠ½ΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈ ΠΌΠ΅ΡΠΆΠ° ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΠΎΠ΄ ΡΠΌΠΎΡΡΠ΅ΡΡ Π·Π΄Π΅ΡΡ βοΈ β«οΈmake_logs() Π³Π΅Π½Π΅ΡΠΈΡ 30 ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΠΎ 50Mb Π΄Π»Ρ ΡΠ΅ΡΡΠ° β«οΈmerge_list() ΠΌΠ΅ΡΠΆΠΈΡ ΡΠ°ΠΉΠ»Ρ ΡΠ΅ΡΠ΅Π· ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ β«οΈmerge_heapq() ΠΌΠ΅ΡΠΆΠΈΡ ΡΠ°ΠΉΠ»Ρ ΡΠ΅ΡΠ΅Π· heapq β«οΈmemory_profiler ΡΡΠΈΡΠ°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΠ°ΠΌΡΡΡ (Π½ΡΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ) β«οΈ ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΡΡ Π·Π°ΠΌΠ΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΠΎΠΌΡ Π»Π΅Π½ΠΈΠ²ΠΎ ΡΠ°ΠΌ ΠΆΠ΅ ΡΠΌΠΎΡΡΠΈΡΠ΅ ΠΌΠΎΠΈ ΡΠ΅ΡΡΡ: 1.5Gb ΠΈ 19.5Ρ ΠΏΡΠΎΡΠΈΠ² 19Mb ΠΈ 2ΠΌ 43Ρ ΠΏΠ°ΠΌΡΡΠΈ Π² 80 ΡΠ°Π· ΠΌΠ΅Π½ΡΡΠ΅, Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π² 8 ΡΠ°Π· Π±ΠΎΠ»ΡΡΠ΅ β οΈ ΠΠΠΠΠ Π΄Π»Ρ ΡΠΈΡΡΠΎΡΡ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ° Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΈ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ΅ΡΡΡ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡ. Π’ΠΎ Π΅ΡΡΡ Π·Π°ΠΊΠΎΠΌΠ΅Π½ΡΠΈΠ»ΠΈ Π²ΡΠΎΡΠΎΠΉ, Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠΉ, Π·Π°ΠΊΠΎΠΌΠ΅Π½ΡΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠΉ, Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ Π²ΡΠΎΡΠΎΠΉ. #bacik