ΠΠ°ΠΊΠΎ Π΄Π° ΡΠ° ΠΏΡΠΎΡΠΈΡΠ°ΡΠ΅ ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ°: Π‘Π΅ ΠΈΠ·Π²ΠΈΠ½ΡΠ²Π°ΠΌ ΡΡΠΎ ΡΠ΅ΠΊΡΡΠΎΡ Π΅ ΡΠΎΠ»ΠΊΡ Π΄ΠΎΠ»Π³ ΠΈ Ρ
Π°ΠΎΡΠΈΡΠ΅Π½. ΠΠ° Π΄Π° Π²ΠΈ Π·Π°ΡΡΠ΅Π΄ΠΈ Π²ΡΠ΅ΠΌΠ΅, ΡΠ΅ΠΊΠΎΠ΅ ΠΏΠΎΠ³Π»Π°Π²ΡΠ΅ Π³ΠΎ Π·Π°ΠΏΠΎΡΠ½ΡΠ²Π°ΠΌ ΡΠΎ Π²ΠΎΠ²Π΅Π΄ βΠ¨ΡΠΎ Π½Π°ΡΡΠΈΠ²β, ΠΊΠΎΡ ΡΠ° ΡΡΠΌΠΈΡΠ° ΡΡΡΡΠΈΠ½Π°ΡΠ° Π½Π° ΠΏΠΎΠ³Π»Π°Π²ΡΠ΅ΡΠΎ Π²ΠΎ Π΅Π΄Π½Π° ΠΈΠ»ΠΈ Π΄Π²Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΡΠΈ.
βΠ‘Π°ΠΌΠΎ ΠΏΠΎΠΊΠ°ΠΆΠΈ ΠΌΠΈ Π³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ!β ΠΠΊΠΎ ΡΠ°ΠΌΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΎΠ΄ ΠΊΠ°Π΄Π΅ Π΄ΠΎΡΠ΄ΠΎΠ², ΡΠΎΠ³Π°Ρ ΠΏΡΠ΅ΡΠΊΠΎΠΊΠ½Π΅ΡΠ΅ Π³ΠΎ ΠΏΠΎΠ³Π»Π°Π²ΡΠ΅ΡΠΎ βΠΠ° ΡΡΠ°Π½Π΅ΡΠ΅ ΠΏΠΎΠΈΠ½Π²Π΅Π½ΡΠΈΠ²Π½ΠΈβ, Π½ΠΎ ΠΌΠΈΡΠ»Π°ΠΌ Π΄Π΅ΠΊΠ° Π΅ ΠΏΠΎΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΠΈ ΠΏΠΎΠΊΠΎΡΠΈΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΠΈΡΠ° Π·Π° Π½Π΅ΡΡΠΏΠ΅Ρ ΠΎΡ.
ΠΠ΅ΠΎΠ΄Π°ΠΌΠ½Π° Π΄ΠΎΠ±ΠΈΠ² Π·Π°Π΄Π°ΡΠ° Π΄Π° ΠΏΠΎΡΡΠ°Π²Π°ΠΌ ΠΏΡΠΎΡΠ΅Ρ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π³ΠΎΠ»Π΅ΠΌ ΠΎΠ±Π΅ΠΌ Π½Π° ΡΡΡΠΎΠ²ΠΈ ΠΠΠ ΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈ (ΡΠ΅Ρ
Π½ΠΈΡΠΊΠΈ SNP ΡΠΈΠΏ). ΠΠΎΡΡΠ΅Π±Π°ΡΠ° Π±Π΅ΡΠ΅ Π±ΡΠ·ΠΎ Π΄Π° ΡΠ΅ Π΄ΠΎΠ±ΠΈΡΠ°Ρ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π° Π΄Π°Π΄Π΅Π½Π° Π³Π΅Π½Π΅ΡΡΠΊΠ° Π»ΠΎΠΊΠ°ΡΠΈΡΠ° (Π½Π°ΡΠ΅ΡΠ΅Π½Π° SNP) Π·Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ°ΡΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈ Π·Π°Π΄Π°ΡΠΈ. ΠΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΈ R ΠΈ AWK, ΠΌΠΎΠΆΠ΅Π² Π΄Π° Π³ΠΈ ΠΈΡΡΠΈΡΡΠ°ΠΌ ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΠΌ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΡΠΎΠ΄Π΅Π½ Π½Π°ΡΠΈΠ½, ΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ° Π·Π°Π±ΡΠ·Π°Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° Π±Π°ΡΠ°ΡΠ°ΡΠ°. ΠΠ²Π° Π½Π΅ ΠΌΠΈ Π±Π΅ΡΠ΅ Π»Π΅ΡΠ½ΠΎ ΠΈ Π±Π°ΡΠ°ΡΠ΅ Π±ΡΠΎΡΠ½ΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΠ²Π°ΡΠ°. ΠΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ° ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΡΠ΅ Π½Π΅ΠΊΠΎΠΈ ΠΎΠ΄ ΠΌΠΎΠΈΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ ΠΈ Π΄Π° Π²ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌΠ΅ ΡΠΎ ΡΡΠΎ Π·Π°Π²ΡΡΠΈΠ².
ΠΡΠ²ΠΎ, Π½Π΅ΠΊΠΎΠΈ Π²ΠΎΠ²Π΅Π΄Π½ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΡΠ²Π°ΡΠ°.
ΠΠΎΠ΄Π°ΡΠΎΡΠΈ
ΠΠ°ΡΠΈΠΎΡ ΡΠ½ΠΈΠ²Π΅ΡΠ·ΠΈΡΠ΅ΡΡΠΊΠΈ ΡΠ΅Π½ΡΠ°Ρ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π³Π΅Π½Π΅ΡΡΠΊΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½ΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ ΡΠΎΡΠΌΠ° Π½Π° TSV ΠΎΠ΄ 25 TB. ΠΠΈ Π΄ΠΎΠ±ΠΈΠ² ΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΈ Π²ΠΎ 5 Gzip-ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΎΠ΄ ΠΊΠΎΠΈ ΡΠ΅ΠΊΠΎΡ ΡΠΎΠ΄ΡΠΆΠΈ ΠΎΠΊΠΎΠ»Ρ 240 Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΠΎΠ΄ ΡΠ΅ΡΠΈΡΠΈ Π³ΠΈΠ³Π°Π±Π°ΡΡΠΈ. Π‘Π΅ΠΊΠΎΡ ΡΠ΅Π΄ ΡΠΎΠ΄ΡΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π° Π΅Π΄Π΅Π½ SNP ΠΎΠ΄ Π΅Π΄Π΅Π½ ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅Ρ. ΠΠΊΡΠΏΠ½ΠΎ Π±Π΅Π° ΠΏΡΠ΅Π½Π΅ΡΠ΅Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π° ~ 2,5 ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ SNP ΠΈ ~ 60 ΠΈΠ»ΡΠ°Π΄ΠΈ Π»ΡΡΠ΅. ΠΠΎΠΊΡΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈΡΠ΅ Π·Π° SNP, Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΡΠΎΠ΄ΡΠΆΠ΅Π° Π±ΡΠΎΡΠ½ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΡΠΎ Π±ΡΠΎΠ΅Π²ΠΈ ΡΡΠΎ ΠΎΠ΄ΡΠ°Π·ΡΠ²Π°Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ΠΈΠ½ΡΠ΅Π½Π·ΠΈΡΠ΅ΡΠΎΡ Π½Π° ΡΠΈΡΠ°ΡΠ΅, ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ°ΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π°Π»Π΅Π»ΠΈ ΠΈΡΠ½. ΠΠΊΡΠΏΠ½ΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΎΠΊΠΎΠ»Ρ 30 ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ.
ΡΠ΅Π»
ΠΠ°ΠΊΠΎ ΠΈ ΡΠΎ ΡΠ΅ΠΊΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, Π½Π°ΡΠ²Π°ΠΆΠ½ΠΎ Π±Π΅ΡΠ΅ Π΄Π° ΡΠ΅ ΠΎΠ΄ΡΠ΅Π΄ΠΈ ΠΊΠ°ΠΊΠΎ ΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅. ΠΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ Π½ΠΈΠ΅ Π½Π°ΡΠΌΠ½ΠΎΠ³Ρ ΡΠ΅ ΠΈΠ·Π±ΠΈΡΠ°ΠΌΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈ ΡΠ΅ΠΊΠΎΠ²ΠΈ Π·Π° SNP Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° SNP. Π’ΠΎ Π΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π°ΠΌ Π±ΡΠ΄ΡΡ Π½ΡΠΆΠ½Ρ Π΄Π°Π½Π½ΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ SNP. Π― Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ» Π½Π°ΡΡΠΈΡΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠ΅, Π±ΡΡΡΡΠ΅Π΅ ΠΈ Π΄Π΅ΡΠ΅Π²Π»Π΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ Π²ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ, ΠΎΡΠ½ΠΎΡΡΡΠΈΠ΅ΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· 2,5 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² SNP.
ΠΠ°ΠΊΠΎ Π΄Π° Π½Π΅ Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°
ΠΠ° ΡΠΈΡΠΈΡΠ°ΠΌ ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΎ ΠΊΠ»ΠΈΡΠ΅:
ΠΠ΅ ΡΡΠΏΠ΅Π°Π² ΠΈΠ»ΡΠ°Π΄Π° ΠΏΠ°ΡΠΈ, ΡΠ°ΠΌΠΎ ΠΎΡΠΊΡΠΈΠ² ΠΈΠ»ΡΠ°Π΄Π° Π½Π°ΡΠΈΠ½ΠΈ Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π°ΠΌ ΠΏΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΊΡΠΏ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ ΡΠΎΡΠΌΠ°Ρ ΠΏΠΎΠ³ΠΎΠ΄Π΅Π½ Π·Π° ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅.
ΠΡΠ²ΠΎ ΠΏΡΠΎΠ±Π°ΡΡΠ΅
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²: ΠΠ΅ ΠΏΠΎΡΡΠΎΠΈ Π΅Π²ΡΠΈΠ½ Π½Π°ΡΠΈΠ½ Π΄Π° ΡΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π°Ρ 25 Π’Π ΠΈΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎ.
ΠΡΠΊΠ°ΠΊΠΎ Π³ΠΎ ΠΏΠΎΠΌΠΈΠ½Π°Π² ΠΊΡΡΡΠΎΡ βΠΠ°ΠΏΡΠ΅Π΄Π½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈβ Π½Π° Π£Π½ΠΈΠ²Π΅ΡΠ·ΠΈΡΠ΅ΡΠΎΡ ΠΠ°Π½Π΄Π΅ΡΠ±ΠΈΠ»Ρ, Π±Π΅Π² ΡΠΈΠ³ΡΡΠ΅Π½ Π΄Π΅ΠΊΠ° ΡΡΠΈΠΊΠΎΡ Π΅ Π²ΠΎ ΡΠΎΡΠ±Π°ΡΠ°. ΠΠ΅ΡΠΎΡΠ°ΡΠ½ΠΎ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π΅Π΄Π΅Π½ ΠΈΠ»ΠΈ Π΄Π²Π° ΡΠ°ΡΠ° Π·Π° Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ Hive Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π½ΠΈΠ· ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΈ Π΄Π° Π³ΠΎ ΠΏΡΠΈΡΠ°Π²ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΎΡ. ΠΠΈΠ΄Π΅ΡΡΠΈ Π½Π°ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠ΅ Π·Π°ΡΡΠ²Π°Π½ΠΈ Π²ΠΎ AWS S3, ΡΠ° ΠΊΠΎΡΠΈΡΡΠ΅Π² ΡΡΠ»ΡΠ³Π°ΡΠ°
ΠΡΠΊΠ°ΠΊΠΎ ΠΈ Π³ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ°Π² Π½Π° ΠΡΠΈΠ½Π° ΠΌΠΎΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ ΡΠΎΡΠΌΠ°Ρ, ΠΈΠ·Π²ΡΡΠΈΠ² Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΡΠ΅ΡΡΠΎΠ²ΠΈ ΡΠΎ ΠΏΡΠ°ΡΠ°ΡΠ° ΠΊΠ°ΠΊΠΎ ΠΎΠ²Π°:
select * from intensityData limit 10;
Π Π±ΡΡΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ» Ρ ΠΎΡΠΎΡΠΎ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ. ΠΠΎΡΠΎΠ²ΠΎ.
Π‘Π΅ Π΄ΠΎΠ΄Π΅ΠΊΠ° Π½Π΅ ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΠΎΠ²ΠΌΠ΅ Π΄Π° Π³ΠΈ ΠΈΡΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π²ΠΎ Π½Π°ΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ° ...
ΠΠ΄ ΠΌΠ΅Π½Π΅ Π±Π΅ΡΠ΅ ΠΏΠΎΠ±Π°ΡΠ°Π½ΠΎ Π΄Π° Π³ΠΈ ΠΈΠ·Π²Π°Π΄Π°ΠΌ ΡΠΈΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° SNP Π·Π° Π΄Π° Π³ΠΎ ΡΠ΅ΡΡΠΈΡΠ°ΠΌ ΠΌΠΎΠ΄Π΅Π»ΠΎΡ. ΠΠΎ ΠΈΠ·Π²ΡΡΠΈΠ² Π±Π°ΡΠ°ΡΠ΅ΡΠΎ:
select * from intensityData
where snp = 'rs123456';
...ΠΈ ΠΏΠΎΡΠ½Π° Π΄Π° ΡΠ΅ΠΊΠ°. ΠΠΎ ΠΎΡΡΠΌ ΠΌΠΈΠ½ΡΡΠΈ ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ 4 Π’Π Π±Π°ΡΠ°Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, Π³ΠΎ Π΄ΠΎΠ±ΠΈΠ² ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΎΡ. ΠΡΠΈΠ½Π° Π½Π°ΠΏΠ»Π°ΡΠ° ΡΠΏΠΎΡΠ΅Π΄ ΠΎΠ±Π΅ΠΌΠΎΡ Π½Π° ΠΏΡΠΎΠ½Π°ΡΠ΄Π΅Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, 5 Π΄ΠΎΠ»Π°ΡΠΈ ΠΏΠΎ ΡΠ΅ΡΠ°Π±Π°ΡΡ. Π’Π°ΠΊΠ°, ΠΎΠ²Π° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΎ Π±Π°ΡΠ°ΡΠ΅ ΡΠΈΠ½Π΅ΡΠ΅ 20 Π΄ΠΎΠ»Π°ΡΠΈ ΠΈ ΠΎΡΡΠΌ ΠΌΠΈΠ½ΡΡΠΈ ΡΠ΅ΠΊΠ°ΡΠ΅. ΠΠ° Π΄Π° Π³ΠΎ Π²ΠΊΠ»ΡΡΠΈΠΌΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΎΡ Π½Π° ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΠΌΠΎΡΠ°Π²ΠΌΠ΅ Π΄Π° ΡΠ΅ΠΊΠ°ΠΌΠ΅ 38 Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΈ Π΄Π° ΠΏΠ»Π°ΡΠΈΠΌΠ΅ 50 ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ Π΄ΠΎΠ»Π°ΡΠΈ.ΠΡΠΈΠ³Π»Π΅Π΄Π½ΠΎ, ΠΎΠ²Π° Π½Π΅ Π½ΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°ΡΠ΅.
ΠΠ΅ΡΠ΅ Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΠ°ΡΠΊΠ΅Ρ...
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²: ΠΠΈΠ΄Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΈ ΡΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° Π²Π°ΡΠΈΡΠ΅ ΠΠ°ΡΠΊΠ΅Ρ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΠΈ Π½ΠΈΠ²Π½Π°ΡΠ° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΠ°.
ΠΡΠ²ΠΎ ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΠΎΠ² Π΄Π° ΡΠ° ΠΏΠΎΠΏΡΠ°Π²Π°ΠΌ ΡΠΈΡΡΠ°ΡΠΈΡΠ°ΡΠ° ΡΠΎ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠΈΡΠ΅ TSV Π²ΠΎ
ΠΡΡΡΡΠ°Π² Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π° Π·Π°Π΄Π°ΡΠ°
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Π΅ ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈΠΎΡ (ΠΈ ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΠ°Π½) ΡΠΈΠΏ Π½Π° ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ° Π½Π° Parquet, snappy, Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄Π΅Π»ΠΈ. ΠΠ°ΡΠΎΠ°, ΡΠ΅ΠΊΠΎΡ ΠΈΠ·Π²ΡΡΠΈΡΠ΅Π» Π±Π΅ΡΠ΅ Π·Π°Π³Π»Π°Π²Π΅Π½ Π²ΠΎ Π·Π°Π΄Π°ΡΠ°ΡΠ° Π΄Π° ΡΠ° ΡΠ°ΡΠΏΠ°ΠΊΡΠ²Π° ΠΈ ΠΏΡΠ΅Π·Π΅ΠΌΠ΅ ΡΠ΅Π»Π°ΡΠ° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΎΠ΄ 3,5 GB.
ΠΡΠ΄Π΅ Π΄Π° Π³ΠΎ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²: Π‘ΠΎΡΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π΅ ΡΠ΅ΡΠΊΠΎ, ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π°ΠΊΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π°Ρ.
ΠΠ½Π΅ ΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Ρ ΠΏΠΎΠ½ΡΠ» ΡΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠ½Π΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π»ΠΈΡΡ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ SNP, Π° Π½Π΅ ΠΏΠΎ Π»ΡΠ΄ΡΠΌ. Π’ΠΎΠ³Π΄Π° Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΡΠ°Π½ΠΊΠ΅ Π΄Π°Π½Π½ΡΡ Π±ΡΠ΄Π΅Ρ Ρ ΡΠ°Π½ΠΈΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ SNP, ΠΈ ΡΠΎΠ³Π΄Π° ΡΠ΅Π±Ρ Π²ΠΎ Π²ΡΠ΅ΠΉ ΠΊΡΠ°ΡΠ΅ ΠΏΡΠΎΡΠ²ΠΈΡ Β«ΡΠΌΠ½Π°ΡΒ» ΡΡΠ½ΠΊΡΠΈΡ Parquet Β«ΠΎΡΠΊΡΡΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅Β». Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΈΠ»Π»ΠΈΠ°ΡΠ΄Ρ ΡΡΡΠΎΠΊ, ΡΠ°ΡΠΊΠΈΠ΄Π°Π½Π½ΡΡ ΠΏΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΡ, ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ.
ΠΠ°Ρ Π·Π΅ΠΌΠ°ΠΌ ΡΠ°ΡΠΎΠ²ΠΈ ΠΏΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈ Π½Π° ΠΊΠΎΠ»Π΅Ρ: βΠ£Ρ, Π½ΠΈΠΊΠΎΡ Π½Π΅ ΡΠ΅ Π³ΡΠΈΠΆΠΈ Π·Π° ΠΏΡΠ΅ΡΠΌΠ΅ΡΠΊΠΎΠ²Π½Π°ΡΠ° ΡΠ»ΠΎΠΆΠ΅Π½ΠΎΡΡ Π½Π° ΡΠΈΡΠ΅ ΠΎΠ²ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈ Π·Π° ΡΠΎΡΡΠΈΡΠ°ΡΠ΅β
Π‘Π΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π°ΠΌ Π΄Π° ΠΏΠΎΠ΄ΡΠ΅Π΄Π°ΠΌ ΠΊΠΎΠ»ΠΎΠ½Π° Π²ΠΎ 20 Π’Π
#ΠΈΡΠΊΡΠ° ΡΠ°Π±Π΅Π»Π°: βΠΠΎΡΡΠΎ ΡΡΠ°Π΅ ΡΠΎΠ»ΠΊΡ Π΄ΠΎΠ»Π³ΠΎ?β# ΠΠ°ΡΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π±ΠΎΡΠ±ΠΈ.β ΠΠΈΠΊ Π‘ΡΡΠ°ΡΠ΅Ρ (@NicholasStrayer)
ΠΠ°ΡΡ 11, 2019
AWS Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠ²Π½ΠΎ Π½Π΅ ΡΠ°ΠΊΠ° Π΄Π° ΠΈΠ·Π΄Π°Π΄Π΅ ΠΏΠΎΠ²ΡΠ°Ρ Π½Π° ΠΏΠ°ΡΠΈ ΠΏΠΎΡΠ°Π΄ΠΈ ΠΏΡΠΈΡΠΈΠ½Π°ΡΠ° βΠΠ°Ρ ΡΡΠΌ ΡΠ°ΡΠ΅Π°Π½ ΡΡΡΠ΄Π΅Π½Ρβ. ΠΡΠΊΠ°ΠΊΠΎ ΡΡΡΠ°Π² ΡΠΎ ΡΠΎΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΠΌΠ°Π·ΠΎΠ½ Π»Π΅ΠΏΠ°ΠΊ, ΡΠΎΡ ΡΠ°Π±ΠΎΡΠ΅ΡΠ΅ 2 Π΄Π΅Π½Π° ΠΈ ΡΠ΅ ΡΡΠ½Π°.
Π¨ΡΠΎ Π΅ ΡΠΎ ΠΏΠ°ΡΡΠΈΡΠΈΠΎΠ½ΠΈΡΠ°ΡΠ΅ΡΠΎ?
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²: ΠΏΠ°ΡΡΠΈΡΠΈΠΈ Π² Spark Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Ρ.
ΠΠΎΡΠΎΠ° Π΄ΠΎΡΠ΄ΠΎΠ² Π΄ΠΎ ΠΈΠ΄Π΅ΡΠ° Π·Π° ΠΏΠΎΠ΄Π΅Π»Π±Π° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π²ΠΎ Ρ
ΡΠΎΠΌΠΎΠ·ΠΎΠΌΠΈΡΠ΅. ΠΠΌΠ° 23 ΠΎΠ΄ Π½ΠΈΠ² (ΠΈ ΡΡΡΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π°ΠΊΠΎ ΡΠ΅ Π·Π΅ΠΌΠ°Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΌΠΈΡΠΎΡ
ΠΎΠ½Π΄ΡΠΈΡΠ°Π»Π½Π°ΡΠ° ΠΠΠ ΠΈ Π½Π΅ΠΌΠ°ΠΏΠΈΡΠ°Π½ΠΈΡΠ΅ ΡΠ΅Π³ΠΈΠΎΠ½ΠΈ).
ΠΠ²Π° ΡΠ΅ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π΄Π° Π³ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π½Π° ΠΏΠΎΠΌΠ°Π»ΠΈ ΠΏΠ°ΡΡΠΈΡΠ°. ΠΠΊΠΎ Π΄ΠΎΠ΄Π°Π΄Π΅ΡΠ΅ ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π° Π»ΠΈΠ½ΠΈΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΡΠ°ΡΠ° Π·Π° ΠΈΠ·Π²ΠΎΠ· Spark Π²ΠΎ ΡΠΊΡΠΈΠΏΡΠ°ΡΠ° Glue partition_by = "chr"
, ΡΠΎΠ³Π°Ρ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄Π΅Π»Π°Ρ Π½Π° ΠΊΠΎΡΠΈ.
ΠΠ΅Π½ΠΎΠΌΠΎΡ ΡΠ΅ ΡΠΎΡΡΠΎΠΈ ΠΎΠ΄ Π±ΡΠΎΡΠ½ΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈ Π½Π°ΡΠ΅ΡΠ΅Π½ΠΈ Ρ
ΡΠΎΠΌΠΎΠ·ΠΎΠΌΠΈ.
ΠΠ° ΠΆΠ°Π», ΡΠΎΠ° Π½Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°ΡΠ΅. Π₯ΡΠΎΠΌΠΎΠ·ΠΎΠΌΠΈΡΠ΅ ΠΈΠΌΠ°Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½ΠΈ, ΡΡΠΎ Π·Π½Π°ΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠ»ΠΈΡΠΈΠ½ΠΈ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. ΠΠ²Π° Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° Π·Π°Π΄Π°ΡΠΈΡΠ΅ ΡΡΠΎ Spark ΠΈΠΌ Π³ΠΈ ΠΈΡΠΏΡΠ°ΡΠ°ΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΈΡΠ΅ Π½Π΅ Π±Π΅Π° ΠΈΠ·Π±Π°Π»Π°Π½ΡΠΈΡΠ°Π½ΠΈ ΠΈ ΠΏΠΎΠ»Π΅ΠΊΠ° Π·Π°Π²ΡΡΡΠ²Π°Π° Π±ΠΈΠ΄Π΅ΡΡΠΈ Π½Π΅ΠΊΠΎΠΈ ΡΠ°Π·Π»ΠΈ Π·Π°Π²ΡΡΠΈΡΠ° ΡΠ°Π½ΠΎ ΠΈ Π±Π΅Π° Π½Π΅Π°ΠΊΡΠΈΠ²Π΅Π½. Π‘Π΅ΠΏΠ°ΠΊ, Π·Π°Π΄Π°ΡΠΈΡΠ΅ Π±Π΅Π° Π·Π°Π²ΡΡΠ΅Π½ΠΈ. ΠΠΎ, ΠΊΠΎΠ³Π° ΡΠ΅ Π±Π°ΡΠ°ΡΠ΅ Π΅Π΄Π½Π° Π‘ΠΠ, Π½Π΅ΡΠ°ΠΌΠ½ΠΎΡΠ΅ΠΆΠ°ΡΠ° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ. Π’ΡΠΎΡΠΎΡΠΈΡΠ΅ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° SNP Π½Π° ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠΈΡΠ΅ Ρ ΡΠΎΠΌΠΎΠ·ΠΎΠΌΠΈ (Ρ.Π΅. ΠΊΠ°Π΄Π΅ ΡΠ°ΠΊΠ°ΠΌΠ΅ Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅ΠΌΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ) ΡΠ΅ Π½Π°ΠΌΠ°Π»ΠΈΡΠ° ΡΠ°ΠΌΠΎ Π·Π° ΠΎΠΊΠΎΠ»Ρ 10 ΡΠ°ΠΊΡΠΎΡ. ΠΠ½ΠΎΠ³Ρ, Π½ΠΎ Π½Π΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ.
Π Π΅ΡΠ»ΠΈ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π½Π° Π΅ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ?
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²: ΠΠΈΠΊΠΎΠ³Π°Ρ Π½Π΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π°ΡΡΠ΅ ΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ 2,5 ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ Π²ΠΎΠΎΠΏΡΡΠΎ.
Π Π΅ΡΠΈΠ² Π΄Π° ΠΎΠ΄Π°ΠΌ Π΄ΠΎ ΠΊΡΠ°Ρ ΠΈ Π³ΠΎ ΠΏΠΎΠ΄Π΅Π»ΠΈΠ² ΡΠ΅ΠΊΠΎΡ SNP. ΠΠ²Π° ΠΎΡΠΈΠ³ΡΡΠΈ Π΄Π΅ΠΊΠ° ΠΏΠ°ΡΡΠΈΡΠΈΠΈΡΠ΅ ΡΠ΅ ΡΠΎ Π΅Π΄Π½Π°ΠΊΠ²Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°. ΠΠΠ¨Π ΠΠΠ¨Π ΠΠΠΠΠ. ΠΠΎΡΠΈΡΡΠ΅Π² ΠΠ΅ΠΏΠ°ΠΊ ΠΈ Π΄ΠΎΠ΄Π°Π΄ΠΎΠ² Π½Π΅Π²ΠΈΠ½Π° Π»ΠΈΠ½ΠΈΡΠ° partition_by = 'snp'
. ΠΠ°Π΄Π°ΡΠ°ΡΠ° Π·Π°ΠΏΠΎΡΠ½Π° ΠΈ ΠΏΠΎΡΠ½Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°. ΠΠ΄Π΅Π½ Π΄Π΅Π½ ΠΏΠΎΠ΄ΠΎΡΠ½Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠ² ΠΈ Π²ΠΈΠ΄ΠΎΠ² Π΄Π΅ΠΊΠ° ΡΓ¨ ΡΡΡΠ΅ Π½Π΅ΠΌΠ° Π½ΠΈΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π½Π° S3, ΠΏΠ° ΡΠ° ΡΠ±ΠΈΠ² Π·Π°Π΄Π°ΡΠ°ΡΠ°. ΠΠ·Π³Π»Π΅Π΄Π° Π΄Π΅ΠΊΠ° Glue ΠΏΠΈΡΡΠ²Π°Π» ΡΡΠ΅Π΄Π½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π½Π° ΡΠΊΡΠΈΠ΅Π½Π° Π»ΠΎΠΊΠ°ΡΠΈΡΠ° Π²ΠΎ S3, ΠΌΠ½ΠΎΠ³Ρ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ, ΠΌΠΎΠΆΠ΅Π±ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ. ΠΠ°ΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ°, ΠΌΠΎΡΠ°ΡΠ° Π³ΡΠ΅ΡΠΊΠ° ΡΠΈΠ½Π΅ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ ΠΈΠ»ΡΠ°Π΄Π° Π΄ΠΎΠ»Π°ΡΠΈ ΠΈ Π½Π΅ ΠΌΡ ΡΠ³ΠΎΠ΄ΠΈ Π½Π° ΠΌΠΎΡΠΎΡ ΠΌΠ΅Π½ΡΠΎΡ.
ΠΠΎΠ΄Π΅Π»Π±Π° + ΡΠΎΡΡΠΈΡΠ°ΡΠ΅
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²: Π‘ΠΎΡΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π΅ ΡΓ¨ ΡΡΡΠ΅ ΡΠ΅ΡΠΊΠΎ, ΠΊΠ°ΠΊΠΎ ΠΈ ΠΏΠΎΠ΄Π΅ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Spark.
ΠΠΎΡΠΎΡ ΠΏΠΎΡΠ»Π΅Π΄Π΅Π½ ΠΎΠ±ΠΈΠ΄ Π·Π° ΠΏΠ°ΡΡΠΈΡΠΈΡΠ° Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΠ΅ Π΄Π° Π³ΠΈ ΠΏΠΎΠ΄Π΅Π»Π°ΠΌ Ρ ΡΠΎΠΌΠΎΠ·ΠΎΠΌΠΈΡΠ΅ ΠΈ ΠΏΠΎΡΠΎΠ° Π΄Π° ΡΠ° ΠΏΠΎΠ΄ΡΠ΅Π΄Π°ΠΌ ΡΠ΅ΠΊΠΎΡΠ° ΠΏΠ°ΡΡΠΈΡΠΈΡΠ°. Π’Π΅ΠΎΡΠ΅ΡΡΠΊΠΈ, ΠΎΠ²Π° Π±ΠΈ Π³ΠΎ Π·Π°Π±ΡΠ·Π°Π»ΠΎ ΡΠ΅ΠΊΠΎΠ΅ Π±Π°ΡΠ°ΡΠ΅ Π±ΠΈΠ΄Π΅ΡΡΠΈ ΡΠ°ΠΊΠ°Π½ΠΈΡΠ΅ SNP ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΌΠΎΡΠ°Π»Π΅ Π΄Π° Π±ΠΈΠ΄Π°Ρ Π²ΠΎ ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΠ°ΡΠΊΠ΅Ρ ΠΏΠ°ΡΡΠΈΡΠ° Π²ΠΎ Π΄Π°Π΄Π΅Π½ ΠΎΠΏΡΠ΅Π³. ΠΠ° ΠΆΠ°Π», ΡΠΎΡΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π΄ΡΡΠΈ ΠΈ ΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊΠΎ ΡΠ΅ΡΠΊΠ° Π·Π°Π΄Π°ΡΠ°. ΠΠ°ΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ°, ΡΠ΅ ΠΏΡΠ΅ΡΡΠ»ΠΈΠ² Π½Π° EMR Π·Π° ΠΏΡΠΈΡΠΏΠΎΡΠΎΠ±Π΅Π½ ΠΊΠ»Π°ΡΡΠ΅Ρ ΠΈ ΠΊΠΎΡΠΈΡΡΠ΅Π² ΠΎΡΡΠΌ ΠΌΠΎΡΠ½ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΎΡΠΈ (C5.4xl) ΠΈ Sparklyr Π·Π° Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π°ΠΌ ΠΏΠΎΡΠ»Π΅ΠΊΡΠΈΠ±ΠΈΠ»Π΅Π½ ΡΠ°Π±ΠΎΡΠ΅Π½ ΡΠ΅ΠΊ...
# Sparklyr snippet to partition by chr and sort w/in partition
# Join the raw data with the snp bins
raw_data
group_by(chr) %>%
arrange(Position) %>%
Spark_write_Parquet(
path = DUMP_LOC,
mode = 'overwrite',
partition_by = c('chr')
)
...ΡΠ΅ΠΏΠ°ΠΊ, Π·Π°Π΄Π°ΡΠ°ΡΠ° ΡΓ¨ ΡΡΡΠ΅ Π½Π΅ Π±Π΅ΡΠ΅ Π·Π°Π²ΡΡΠ΅Π½Π°. ΠΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π² Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°ΡΠΈΠ½ΠΈ: ΡΠ° Π·Π³ΠΎΠ»Π΅ΠΌΠΈΠ² ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π±Π°ΡΠ° Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° Π·Π° ΡΠ΅ΠΊΠΎΡ ΠΈΠ·Π²ΡΡΠΈΡΠ΅Π» Π½Π° Π±Π°ΡΠ°ΡΠ΅, ΠΊΠΎΡΠΈΡΡΠ΅Π² ΡΠ°Π·Π»ΠΈ ΡΠΎ Π³ΠΎΠ»Π΅ΠΌΠ° ΠΊΠΎΠ»ΠΈΡΠΈΠ½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°, ΠΊΠΎΡΠΈΡΡΠ΅Π² ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π·Π° Π΅ΠΌΠΈΡΡΠ²Π°ΡΠ΅ (ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π·Π° Π΅ΠΌΠΈΡΡΠ²Π°ΡΠ΅), Π½ΠΎ ΡΠ΅ΠΊΠΎΡ ΠΏΠ°Ρ ΠΊΠΎΠ³Π° ΡΠΈΠ΅ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ°Π° ΠΊΠ°ΠΊΠΎ ΠΏΠΎΠ»ΡΠΌΠ΅ΡΠΊΠΈ ΠΈ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½ΠΎ ΠΈΠ·Π²ΡΡΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΏΠΎΡΠ½ΡΠ²Π°Π° Π΄Π° ΠΏΡΠΎΠΏΠ°Π΄Π½Π΅ Π΄ΠΎΠ΄Π΅ΠΊΠ° ΡΓ¨ Π½Π΅ ΠΏΡΠ΅ΡΡΠ°Π½Π΅.
Update: so it begins.
pic.twitter.com/agY4GU2ru5 β ΠΠΈΠΊ Π‘ΡΡΠ°ΡΠ΅Ρ (@NicholasStrayer)
ΠΠΎΠΆΠ΅ 15, 2019
Π‘ΡΠ°Π½ΡΠ²Π°ΠΌ ΠΏΠΎΠΊΡΠ΅Π°ΡΠΈΠ²Π΅Π½
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²: ΠΠΎΠ½Π΅ΠΊΠΎΠ³Π°Ρ ΡΠΏΠ΅ΡΠΈΡΠ°Π»Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π±Π°ΡΠ°Π°Ρ ΠΏΠΎΡΠ΅Π±Π½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠ°.
Π‘Π΅ΠΊΠΎΡ SNP ΠΈΠΌΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΡΠ°ΡΠ°. ΠΠ²Π° Π΅ Π±ΡΠΎΡ ΠΊΠΎΡ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° Π½Π° Π±ΡΠΎΡΠΎΡ Π½Π° Π±Π°Π·ΠΈ Π΄ΠΎΠ»ΠΆ Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ Ρ ΡΠΎΠΌΠΎΠ·ΠΎΠΌ. ΠΠ²Π° Π΅ ΡΠ±Π°Π² ΠΈ ΠΏΡΠΈΡΠΎΠ΄Π΅Π½ Π½Π°ΡΠΈΠ½ Π΄Π° Π³ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ Π½Π°ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΡΠΏΡΠ²ΠΈΠ½ ΡΠ°ΠΊΠ°Π² Π΄Π° ΠΏΠΎΠ΄Π΅Π»Π°ΠΌ ΠΏΠΎ ΡΠ΅Π³ΠΈΠΎΠ½ΠΈ Π½Π° ΡΠ΅ΠΊΠΎΡ Ρ ΡΠΎΠΌΠΎΠ·ΠΎΠΌ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 1 - 2000, 2001 - 4000, ΠΈΡΠ½. ΠΠΎ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ Π΅ ΡΡΠΎ SNP-ΠΈΡΠ΅ Π½Π΅ ΡΠ΅ ΡΠ°ΠΌΠ½ΠΎΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π΅Π½ΠΈ Π½ΠΈΠ· Ρ ΡΠΎΠΌΠΎΠ·ΠΎΠΌΠΈΡΠ΅, ΡΠ°ΠΊΠ° ΡΡΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° Π³ΡΡΠΏΠ°ΡΠ° ΡΠ΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΡΠ²Π° ΠΌΠ½ΠΎΠ³Ρ.
ΠΠ°ΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ°, Π΄ΠΎΡΠ΄ΠΎΠ² Π΄ΠΎ ΡΠ°ΡΡΠ»Π΅Π½ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΠΈΡΠ΅ Π²ΠΎ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ (ΡΠ°Π½Π³). ΠΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΈ Π²Π΅ΡΠ΅ ΠΏΡΠ΅Π·Π΅ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΠΏΠΎΠ±Π°ΡΠ°Π² Π΄Π° Π΄ΠΎΠ±ΠΈΡΠ°ΠΌ Π»ΠΈΡΡΠ° Π½Π° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈ SNP, Π½ΠΈΠ²Π½ΠΈΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈ Ρ
ΡΠΎΠΌΠΎΠ·ΠΎΠΌΠΈ. ΠΠΎΡΠΎΠ° Π³ΠΈ ΠΏΠΎΠ΄ΡΠ΅Π΄ΠΈΠ² ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π²ΠΎ ΡΠ΅ΠΊΠΎΡ Ρ
ΡΠΎΠΌΠΎΠ·ΠΎΠΌ ΠΈ ΡΠΎΠ±ΡΠ°Π² SNP Π²ΠΎ Π³ΡΡΠΏΠΈ (ΠΊΠ°Π½ΡΠ°) ΡΠΎ Π΄Π°Π΄Π΅Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°. ΠΠ° ΡΠ΅ΡΠ΅ΠΌΠ΅ ΠΏΠΎ 1000 SNP. ΠΠ²Π° ΠΌΠΈ ΡΠ° Π΄Π°Π΄Π΅ Π²ΡΡΠΊΠ°ΡΠ° Π‘ΠΠ-Π΄ΠΎ-Π³ΡΡΠΏΠ°-ΠΏΠΎ-Ρ
ΡΠΎΠΌΠΎΠ·ΠΎΠΌ.
Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ² Ρ ΡΠ΄Π΅Π»Π°Π» Π³ΡΡΠΏΠΏΡ (bin) ΠΏΠΎ 75 SNP, ΠΏΡΠΈΡΠΈΠ½Ρ ΠΎΠ±ΡΡΡΠ½Ρ Π½ΠΈΠΆΠ΅.
snp_to_bin <- unique_snps %>%
group_by(chr) %>%
arrange(position) %>%
mutate(
rank = 1:n()
bin = floor(rank/snps_per_bin)
) %>%
ungroup()
ΠΡΠ²ΠΎ ΠΏΡΠΎΠ±Π°ΡΡΠ΅ ΡΠΎ Spark
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²: ΠΠ³ΡΠ΅Π³ΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° ΠΈΡΠΊΡΠ° Π΅ Π±ΡΠ·ΠΎ, Π½ΠΎ ΠΏΠ°ΡΡΠΈΡΠΈΠΎΠ½ΠΈΡΠ°ΡΠ΅ΡΠΎ Π΅ ΡΠ΅ΠΏΠ°ΠΊ ΡΠΊΠ°ΠΏΠΎ.
Π‘Π°ΠΊΠ°Π² Π΄Π° ΡΠ° ΠΏΡΠΎΡΠΈΡΠ°ΠΌ ΠΎΠ²Π°Π° ΠΌΠ°Π»Π° (2,5 ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ ΡΠ΅Π΄ΠΎΠ²ΠΈ) ΡΠ°ΠΌΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ Spark, Π΄Π° ΡΠ° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΠΌ ΡΠΎ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΈ ΠΏΠΎΡΠΎΠ° Π΄Π° ΡΠ° ΠΏΠΎΠ΄Π΅Π»Π°ΠΌ ΡΠΎ Π½ΠΎΠ²ΠΎΠ΄ΠΎΠ΄Π°Π΄Π΅Π½Π°ΡΠ° ΠΊΠΎΠ»ΠΎΠ½Π° bin
.
# Join the raw data with the snp bins
data_w_bin <- raw_data %>%
left_join(sdf_broadcast(snp_to_bin), by ='snp_name') %>%
group_by(chr_bin) %>%
arrange(Position) %>%
Spark_write_Parquet(
path = DUMP_LOC,
mode = 'overwrite',
partition_by = c('chr_bin')
)
ΠΊΠΎΡΠΈΡΡΠ΅Π² sdf_broadcast()
, ΡΠ°ΠΊΠ° ΡΡΠΎ Spark Π·Π½Π°Π΅ Π΄Π΅ΠΊΠ° ΡΡΠ΅Π±Π° Π΄Π° ΡΠ° ΠΈΡΠΏΡΠ°ΡΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠ½Π°ΡΠ° ΡΠ°ΠΌΠΊΠ° Π΄ΠΎ ΡΠΈΡΠ΅ ΡΠ°Π·Π»ΠΈ. ΠΠ²Π° Π΅ ΠΊΠΎΡΠΈΡΠ½ΠΎ Π°ΠΊΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΡΠ΅ ΠΌΠ°Π»ΠΈ ΠΏΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° ΠΈ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π·Π° ΡΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ. ΠΠΎ ΡΠΏΡΠΎΡΠΈΠ²Π½ΠΎ, Spark ΡΠ΅ ΡΡΡΠ΄ΠΈ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΏΠ°ΠΌΠ΅ΡΠ΅Π½ ΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΏΠΎ ΠΏΠΎΡΡΠ΅Π±Π°, ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° Π·Π°Π±Π°Π²ΡΠ²Π°ΡΠ΅.
Π ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ, ΠΌΠΎΡΠ°ΡΠ° ΠΈΠ΄Π΅ΡΠ° Π½Π΅ ΡΡΠΏΠ΅Π°: Π·Π°Π΄Π°ΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠ΅Π° Π½Π΅ΠΊΠΎΠ΅ Π²ΡΠ΅ΠΌΠ΅, Π³ΠΎ Π·Π°Π²ΡΡΠΈΡΠ° ΡΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ, Π° ΠΏΠΎΡΠΎΠ°, ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π²ΡΡΠΈΡΠ΅Π»ΠΈΡΠ΅ Π»Π°Π½ΡΠΈΡΠ°Π½ΠΈ ΡΠΎ ΠΏΠΎΠ΄Π΅Π»Π±Π°, ΡΠΈΠ΅ ΠΏΠΎΡΠ½Π°Π° Π΄Π° ΠΏΡΠΎΠΏΠ°ΡΠ°Π°Ρ.
ΠΠΎΠ΄Π°Π²Π°ΡΠ΅ Π½Π° AWK
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²: ΠΠ΅ ΡΠΏΠΈΡΡΠ΅ ΠΊΠΎΠ³Π° Π²Π΅ ΡΡΠ°Ρ ΠΎΡΠ½ΠΎΠ²ΠΈΡΠ΅. Π‘ΠΈΠ³ΡΡΠ½ΠΎ Π½Π΅ΠΊΠΎΡ Π²Π΅ΡΠ΅ Π²ΠΈ Π³ΠΎ ΡΠ΅ΡΠΈΠ» ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ Π²ΠΎ 1980-ΡΠΈΡΠ΅.
ΠΠΎ ΠΎΠ²ΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΏΡΠΈΡΠΈΠ½Π°ΡΠ° Π·Π° ΡΠΈΡΠ΅ ΠΌΠΎΠΈ Π½Π΅ΡΡΠΏΠ΅ΡΠΈ ΡΠΎ Spark Π±Π΅ΡΠ΅ Π·Π±ΡΠΊΠ°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ. ΠΠΎΠΆΠ΅Π±ΠΈ ΡΠΈΡΡΠ°ΡΠΈΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΡΠΎ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π΅Π½ ΡΡΠ΅ΡΠΌΠ°Π½. Π Π΅ΡΠΈΠ² Π΄Π° ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π°ΠΌ Π΄Π° Π³ΠΈ ΠΏΠΎΠ΄Π΅Π»Π°ΠΌ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΠΎΠ΄ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈΠΎΡ ΡΠ΅ΠΊΡΡ Π²ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΠΎΠ΄ Ρ ΡΠΎΠΌΠΎΠ·ΠΎΠΌΠΈ ΡΠΎ Π½Π°Π΄Π΅ΠΆ Π΄Π΅ΠΊΠ° Π½Π° Spark ΡΠ΅ ΠΌΡ Π΄Π°Π΄Π°ΠΌ βΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΈβ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ.
ΠΠ°ΡΠ°Π² Π½Π° StackOverflow ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄Π΅Π»Π°Ρ ΠΏΠΎ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΠΈ Π½Π°ΡΠ΄ΠΎΠ² stdout
.
ΠΠ°ΠΏΠΈΡΠ°Π² ΡΠΊΡΠΈΠΏΡΠ° Π½Π° Bash Π·Π° Π΄Π° ΡΠ° ΠΈΡΠΏΡΠΎΠ±Π°ΠΌ. ΠΡΠ΅Π·Π΅ΠΌΠΈ Π΅Π΄Π΅Π½ ΠΎΠ΄ ΡΠΏΠ°ΠΊΡΠ²Π°Π½ΠΈΡΠ΅ TSV, Π° ΠΏΠΎΡΠΎΠ° Π³ΠΎ ΠΎΡΠΏΠ°ΠΊΡΠ²Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ gzip
ΠΈ ΠΈΡΠΏΡΠ°ΡΠ΅Π½ΠΈ Π΄ΠΎ awk
.
gzip -dc path/to/chunk/file.gz |
awk -F 't'
'{print $1",..."$30">"chunked/"$chr"_chr"$15".csv"}'
Π£ΡΠΏΠ΅Π°!
ΠΠΎΠΏΠΎΠ»Π½ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ°Π΄ΡΠ°ΡΠ°
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²: gnu parallel
- ΡΠΎΠ° Π΅ ΠΌΠ°Π³ΠΈΡΠ½Π° ΡΠ°Π±ΠΎΡΠ°, ΡΠ΅ΠΊΠΎΡ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈ.
Π Π°Π·Π΄Π΅Π»Π±Π°ΡΠ° Π±Π΅ΡΠ΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ Π±Π°Π²Π½Π° ΠΈ ΠΊΠΎΠ³Π° ΠΏΠΎΡΠ½Π°Π² htop
Π·Π° Π΄Π° ΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠ°ΠΌ ΡΠΏΠΎΡΡΠ΅Π±Π°ΡΠ° Π½Π° ΠΌΠΎΡΠ΅Π½ (ΠΈ ΡΠΊΠ°ΠΏ) ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΊ EC2, ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ° Π΄Π΅ΠΊΠ° ΠΊΠΎΡΠΈΡΡΠ°ΠΌ ΡΠ°ΠΌΠΎ Π΅Π΄Π½ΠΎ ΡΠ°Π΄ΡΠΎ ΠΈ ΠΎΠΊΠΎΠ»Ρ 200 MB ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°. ΠΠ° Π΄Π° Π³ΠΎ ΡΠ΅ΡΠΈΠΌΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ ΠΈ Π΄Π° Π½Π΅ ΠΈΠ·Π³ΡΠ±ΠΈΠΌΠ΅ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠ°ΡΠΈ, ΠΌΠΎΡΠ°Π²ΠΌΠ΅ Π΄Π° ΡΡΠ°ΡΠΈΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ° ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΠ°. ΠΠ° ΡΡΠ΅ΡΠ°, Π²ΠΎ Π°ΠΏΡΠΎΠ»ΡΡΠ½ΠΎ Π½Π΅Π²Π΅ΡΠΎΡΠ°ΡΠ½Π° ΠΊΠ½ΠΈΠ³Π° gnu parallel
, ΠΌΠ½ΠΎΠ³Ρ ΡΠ»Π΅ΠΊΡΠΈΠ±ΠΈΠ»Π΅Π½ ΠΌΠ΅ΡΠΎΠ΄ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅Π½ΠΈΡΠΊΠΈ Π²ΠΎ Unix.
ΠΠΎΠ³Π° ΡΠ° Π·Π°ΠΏΠΎΡΠ½Π°Π² ΠΏΠ°ΡΡΠΈΡΠΈΡΠ°ΡΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ Π½ΠΎΠ²ΠΈΠΎΡ ΠΏΡΠΎΡΠ΅Ρ, ΡΓ¨ Π±Π΅ΡΠ΅ Π²ΠΎ ΡΠ΅Π΄, Π½ΠΎ ΡΓ¨ ΡΡΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΡΠ΅ΡΠ½ΠΎ Π³ΡΠ»ΠΎ - ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ΅ΡΠΎ S3 ΠΎΠ±ΡΠ΅ΠΊΡΠΈ Π½Π° Π΄ΠΈΡΠΊΠΎΡ Π½Π΅ Π±Π΅ΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ Π±ΡΠ·ΠΎ ΠΈ Π½Π΅ Π±Π΅ΡΠ΅ ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ. ΠΠ° Π΄Π° Π³ΠΎ ΠΏΠΎΠΏΡΠ°Π²Π°ΠΌ ΠΎΠ²Π°, Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠ² ΠΎΠ²Π°:
- ΠΠΎΠ·Π½Π°Π² Π΄Π΅ΠΊΠ° Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° ΡΠ°Π·Π°ΡΠ° Π½Π° ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ΅ S3 Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π²ΠΎ ΡΠ΅Π²ΠΊΠΎΠ²ΠΎΠ΄ΠΎΡ, ΡΠ΅Π»ΠΎΡΠ½ΠΎ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ°ΡΡΠΈ Π³ΠΎ ΡΡΠ΅Π΄Π½ΠΎΡΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π½Π° Π΄ΠΈΡΠΊΠΎΡ. ΠΠ²Π° Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° ΠΌΠΎΠΆΠ°ΠΌ Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π°ΠΌ ΠΏΠΈΡΡΠ²Π°ΡΠ΅ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π½Π° Π΄ΠΈΡΠΊΠΎΡ ΠΈ Π΄Π° ΠΊΠΎΡΠΈΡΡΠ°ΠΌ ΡΡΡΠ΅ ΠΏΠΎΠΌΠ°Π», Π° ΡΠΎ ΡΠΎΠ° ΠΈ ΠΏΠΎΠ΅Π²ΡΠΈΠ½ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π½Π° AWS.
- Π’ΠΈΠΌ
aws configure set default.s3.max_concurrent_requests 50
Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π³ΠΎ Π·Π³ΠΎΠ»Π΅ΠΌΠΈ Π±ΡΠΎΡΠΎΡ Π½Π° Π½ΠΈΡΠΊΠΈ ΡΡΠΎ Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠΈ AWS CLI (ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ ΠΈΠΌΠ° 10). - Π‘Π΅ ΠΏΡΠ΅ΡΡΠ»ΠΈΠ² Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ EC2 ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ Π·Π° Π±ΡΠ·ΠΈΠ½Π° Π½Π° ΠΌΡΠ΅ΠΆΠ°ΡΠ°, ΡΠΎ Π±ΡΠΊΠ²Π°ΡΠ° n Π²ΠΎ ΠΈΠΌΠ΅ΡΠΎ. ΠΡΠΊΡΠΈΠ² Π΄Π΅ΠΊΠ° Π³ΡΠ±Π΅ΡΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΡΠΊΠ°ΡΠ° ΠΌΠΎΡ ΠΏΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° n-ΠΈΠ½ΡΡΠ°Π½ΡΠΈ Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠ΅Π½Π·ΠΈΡΠ°Π½ΠΎ ΡΠΎ Π·Π³ΠΎΠ»Π΅ΠΌΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π±ΡΠ·ΠΈΠ½Π°ΡΠ° Π½Π° Π²ΡΠΈΡΡΠ²Π°ΡΠ΅. ΠΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ Π·Π°Π΄Π°ΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅Π² c5n.4xl.
- Π‘ΠΌΠ΅Π½Π΅ΡΠΎ
gzip
Π½Π° , ΠΎΠ²Π° Π΅ Π°Π»Π°ΡΠΊΠ° Π·Π° gzip ΠΊΠΎΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠ°Π²ΠΈ ΠΎΠ΄Π»ΠΈΡΠ½ΠΈ ΡΠ°Π±ΠΎΡΠΈ Π·Π° Π΄Π° ΡΠ° ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΠΈΡΠ° ΠΏΡΠ²ΠΈΡΠ½ΠΎ Π½Π΅ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΠΈΡΠ°Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π·Π° Π΄Π΅ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ° Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ (ΠΎΠ²Π° Π½Π°ΡΠΌΠ°Π»ΠΊΡ ΠΏΠΎΠΌΠΎΠ³Π½Π°).pigz
# Let S3 use as many threads as it wants
aws configure set default.s3.max_concurrent_requests 50
for chunk_file in $(aws s3 ls $DATA_LOC | awk '{print $4}' | grep 'chr'$DESIRED_CHR'.csv') ; do
aws s3 cp s3://$batch_loc$chunk_file - |
pigz -dc |
parallel --block 100M --pipe
"awk -F 't' '{print $1",..."$30">"chunked/{#}_chr"$15".csv"}'"
# Combine all the parallel process chunks to single files
ls chunked/ |
cut -d '_' -f 2 |
sort -u |
parallel 'cat chunked/*_{} | sort -k5 -n -S 80% -t, | aws s3 cp - '$s3_dest'/batch_'$batch_num'_{}'
# Clean up intermediate data
rm chunked/*
done
ΠΠ²ΠΈΠ΅ ΡΠ΅ΠΊΠΎΡΠΈ ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π°Ρ Π΅Π΄Π½ΠΈ ΡΠΎ Π΄ΡΡΠ³ΠΈ Π·Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²Π°Ρ ΡΓ¨ Π΄Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ° ΠΌΠ½ΠΎΠ³Ρ Π±ΡΠ·ΠΎ. Π‘ΠΎ Π·Π³ΠΎΠ»Π΅ΠΌΡΠ²Π°ΡΠ΅ Π½Π° Π±ΡΠ·ΠΈΠ½Π°ΡΠ° Π½Π° ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ΅ ΠΈ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ°ΡΠ΅ Π½Π° Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π΄ΠΈΡΠΊΠΎΡ, ΡΠ΅Π³Π° ΠΌΠΎΠΆΠ΅Π² Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΠΌ ΠΏΠ°ΠΊΠ΅Ρ ΠΎΠ΄ 5 ΡΠ΅ΡΠ°Π±Π°ΡΡΠΈ Π·Π° ΡΠ°ΠΌΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΡΠ°ΡΠ°.
ΠΠ΅ΠΌΠ° Π½ΠΈΡΡΠΎ ΠΏΠΎΡΠ»Π°ΡΠΊΠΎ ΠΎΠ΄ ΡΠΎΠ° Π΄Π° Π³ΠΈ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΈΡΠ΅ ΡΠ°Π΄ΡΠ° Π·Π° ΠΊΠΎΠΈ ΠΏΠ»Π°ΡΠ°ΡΠ΅ Π½Π° AWS ΠΊΠ°ΠΊΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° gnu-parallel, ΠΌΠΎΠΆΠ°ΠΌ Π΄Π° ΠΎΡΠΏΠ°ΠΊΡΠ²Π°ΠΌ ΠΈ Π΄Π° ΠΏΠΎΠ΄Π΅Π»Π°ΠΌ csv ΠΎΠ΄ 19 Π³ΠΈΠ³Π°, ΠΈΡΡΠΎ ΡΠΎΠ»ΠΊΡ Π±ΡΠ·ΠΎ ΠΊΠΎΠ»ΠΊΡ ΡΡΠΎ ΠΌΠΎΠΆΠ°ΠΌ Π΄Π° Π³ΠΎ ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΠΌ. ΠΠ΅ ΠΌΠΎΠΆΠ΅Π² Π΄Π° Π΄ΠΎΠ±ΠΈΡΠ°ΠΌ Π½ΠΈΡΡ ΠΈΡΠΊΡΠ° Π·Π° Π΄Π° Π³ΠΎ Π²ΠΎΠ΄Π°ΠΌ ΠΎΠ²Π°.
# ΠΠ°ΡΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ # ΠΠΈΠ½ΡΠΊΡ pic.twitter.com/Nqyba2zqEk β ΠΠΈΠΊ Π‘ΡΡΠ°ΡΠ΅Ρ (@NicholasStrayer)
ΠΠΎΠΆΠ΅ 17, 2019
ΠΠ²ΠΎΡ ΡΠ²ΠΈΡ ΡΡΠ΅Π±Π°ΡΠ΅ Π΄Π° Π³ΠΎ ΡΠΏΠΎΠΌΠ΅Π½Π΅ βTSVβ. ΠΠ° ΠΆΠ°Π».
ΠΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° Π½ΠΎΠ²ΠΎΠΏΠ°ΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²: Spark ΡΠ°ΠΊΠ° Π½Π΅ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΈ Π½Π΅ ΡΠ°ΠΊΠ° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΠ°ΡΡΠΈΡΠΈΠΈ.
Π‘Π΅Π³Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π±Π΅Π° Π²ΠΎ S3 Π²ΠΎ Π½Π΅ΠΎΡΠΏΠ°ΠΊΡΠ²Π°Π½ (ΡΠΈΡΠ°Ρ: ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½) ΠΈ ΠΏΠΎΠ»ΡΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½ ΡΠΎΡΠΌΠ°Ρ ΠΈ ΠΌΠΎΠΆΠ΅Π² ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π΄Π° ΡΠ΅ Π²ΡΠ°ΡΠ°ΠΌ Π²ΠΎ Spark. ΠΠ΅ ΡΠ΅ΠΊΠ°ΡΠ΅ ΠΈΠ·Π½Π΅Π½Π°Π΄ΡΠ²Π°ΡΠ΅: ΠΠΎΠ²ΡΠΎΡΠ½ΠΎ Π½Π΅ ΡΡΠΏΠ΅Π°Π² Π΄Π° Π³ΠΎ ΠΏΠΎΡΡΠΈΠ³Π½Π°ΠΌ ΡΠΎΠ° ΡΡΠΎ Π³ΠΎ ΡΠ°ΠΊΠ°Π²! ΠΠ΅ΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ ΡΠ΅ΡΠΊΠΎ Π΄Π° ΡΠ΅ ΠΊΠ°ΠΆΠ΅ Π½Π° Spark ΠΊΠ°ΠΊΠΎ ΡΠΎΡΠ½ΠΎ ΡΠ΅ ΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅. Π Π΄ΡΡΠΈ ΠΈ ΠΊΠΎΠ³Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠ² ΠΎΠ²Π°, ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ° Π΄Π΅ΠΊΠ° ΠΈΠΌΠ° ΠΏΡΠ΅ΠΌΠ½ΠΎΠ³Ρ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ (95 ΠΈΠ»ΡΠ°Π΄ΠΈ), ΠΈ ΠΊΠΎΠ³Π° ΠΊΠΎΡΠΈΡΡΠ΅Π² coalesce
Π³ΠΎ Π½Π°ΠΌΠ°Π»ΠΈ Π½ΠΈΠ²Π½ΠΈΠΎΡ Π±ΡΠΎΡ Π½Π° ΡΠ°Π·ΡΠΌΠ½ΠΈ Π³ΡΠ°Π½ΠΈΡΠΈ, ΠΎΠ²Π° ΡΠ° ΡΠ½ΠΈΡΡΠΈ ΠΌΠΎΡΠ°ΡΠ° ΠΏΠ°ΡΡΠΈΡΠΈΡΠ°. Π‘ΠΈΠ³ΡΡΠ΅Π½ ΡΡΠΌ Π΄Π΅ΠΊΠ° ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠΏΡΠ°Π²ΠΈ, Π½ΠΎ ΠΏΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π΄Π΅Π½Π° ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Π² Π΄Π° Π½Π°ΡΠ΄Π°ΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΠ° ΠΊΡΠ°ΡΠΎΡ Π³ΠΈ Π·Π°Π²ΡΡΠΈΠ² ΡΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π²ΠΎ Spark, ΠΈΠ°ΠΊΠΎ ΠΌΠΈ ΡΡΠ΅Π±Π°ΡΠ΅ Π½Π΅ΠΊΠΎΠ΅ Π²ΡΠ΅ΠΌΠ΅ ΠΈ ΠΌΠΎΠΈΡΠ΅ ΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π½Π° Parquet Π½Π΅ Π±Π΅Π° ΠΌΠ½ΠΎΠ³Ρ ΠΌΠ°Π»ΠΈ (~200 KB). Π‘Π΅ΠΏΠ°ΠΊ, ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π±Π΅Π° ΡΠ°ΠΌΡ ΠΊΠ°Π΄Π΅ ΡΡΠΎ Π±Π΅Π° ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ.
ΠΡΠ΅ΠΌΠ°Π»ΠΊΡ ΠΈ Π½Π΅ΡΠ°ΠΌΠ½ΠΎΠΌΠ΅ΡΠ½ΠΎ, ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ!
Π’Π΅ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΏΡΠ°ΡΠ°ΡΠ° Π½Π° Spark
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²: ΠΡΠΊΡΠ°ΡΠ° ΠΈΠΌΠ° ΠΏΡΠ΅ΠΌΠ½ΠΎΠ³Ρ ΡΡΠΎΡΠΎΡΠΈ ΠΊΠΎΠ³Π° ΡΠ΅ΡΠ°Π²Π°ΡΠ΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ.
Π‘ΠΎ ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ΅ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π²ΠΎ ΠΏΠ°ΠΌΠ΅ΡΠ΅Π½ ΡΠΎΡΠΌΠ°Ρ, ΡΡΠΏΠ΅Π°Π² Π΄Π° ΡΠ° ΡΠ΅ΡΡΠΈΡΠ°ΠΌ Π±ΡΠ·ΠΈΠ½Π°ΡΠ°. ΠΠΎΡΡΠ°Π²Π΅ΡΠ΅ R ΡΠΊΡΠΈΠΏΡΠ° Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π»ΠΎΠΊΠ°Π»Π΅Π½ Spark ΡΠ΅ΡΠ²Π΅Ρ, Π° ΠΏΠΎΡΠΎΠ° Π²ΡΠΈΡΠ°ΡΡΠ΅ ΡΠ°ΠΌΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π½Π° Spark ΠΎΠ΄ Π½Π°Π²Π΅Π΄Π΅Π½ΠΎΡΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π½Π° Π³ΡΡΠΏΠ°ΡΠ° Parquet (ΠΊΠΎΡΠΏΠ°). Π‘Π΅ ΠΎΠ±ΠΈΠ΄ΠΎΠ² Π΄Π° Π³ΠΈ Π²ΡΠΈΡΠ°ΠΌ ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, Π½ΠΎ Π½Π΅ ΡΡΠΏΠ΅Π°Π² Π΄Π° Π³ΠΎ Π½Π°ΡΠ΅ΡΠ°ΠΌ Sparklyr Π΄Π° ΡΠ° ΠΏΡΠ΅ΠΏΠΎΠ·Π½Π°Π΅ ΠΏΠ°ΡΡΠΈΡΠΈΡΠ°ΡΠ°.
sc <- Spark_connect(master = "local")
desired_snp <- 'rs34771739'
# Start a timer
start_time <- Sys.time()
# Load the desired bin into Spark
intensity_data <- sc %>%
Spark_read_Parquet(
name = 'intensity_data',
path = get_snp_location(desired_snp),
memory = FALSE )
# Subset bin to snp and then collect to local
test_subset <- intensity_data %>%
filter(SNP_Name == desired_snp) %>%
collect()
print(Sys.time() - start_time)
ΠΠ³Π·Π΅ΠΊΡΡΠΈΡΠ°ΡΠ° ΡΡΠ°Π΅ΡΠ΅ 29,415 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ. ΠΠ½ΠΎΠ³Ρ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΎ, Π½ΠΎ Π½Π΅ ΠΏΡΠ΅ΠΌΠ½ΠΎΠ³Ρ Π΄ΠΎΠ±ΡΠΎ Π·Π° ΠΌΠ°ΡΠΎΠ²Π½ΠΎ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° Π±ΠΈΠ»ΠΎ ΡΡΠΎ. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ, Π½Π΅ ΠΌΠΎΠΆΠ΅Π² Π΄Π° Π³ΠΈ Π·Π°Π±ΡΠ·Π°ΠΌ ΡΠ°Π±ΠΎΡΠΈΡΠ΅ ΡΠΎ ΠΊΠ΅ΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π·Π°ΡΠΎΠ° ΡΡΠΎ ΠΊΠΎΠ³Π° ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π°Π² Π΄Π° ΡΡΠ²Π°ΠΌ ΠΏΠΎΠ΄Π°ΡΠΎΡΠ½Π° ΡΠ°ΠΌΠΊΠ° Π²ΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°, Spark ΡΠ΅ΠΊΠΎΠ³Π°Ρ ΠΏΠ°ΡΠ°ΡΠ΅, Π΄ΡΡΠΈ ΠΈ ΠΊΠΎΠ³Π° Π΄ΠΎΠ΄Π΅Π»ΡΠ²Π°Π² ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ 50 GB ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° Π½Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΡΠΎ ΡΠ΅ΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ°Π»ΠΊΡ ΠΎΠ΄ 15.
ΠΡΠ°ΡΠΈ ΡΠ΅ Π½Π° AWK
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²: Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ Π² AWK ΠΎΡΠ΅Π½Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Ρ.
Π‘ΡΠ°ΡΠΈΠ² Π΄Π΅ΠΊΠ° ΠΌΠΎΠΆΠ°ΠΌ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π°ΠΌ ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠΈ Π±ΡΠ·ΠΈΠ½ΠΈ. Π‘Π΅ ΡΠ΅ΡΠΈΠ² Π½Π° ΡΠΎΠ° Π²ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ
ΠΠ° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°, Π²ΠΎ ΡΠΊΡΠΈΠΏΡΠ°ΡΠ° AWK Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅Π² Π±Π»ΠΎΠΊΠΎΡ BEGIN
. ΠΠ²Π° Π΅ ΠΏΠ°ΡΡΠ΅ ΠΊΠΎΠ΄ ΡΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΡΠ΅Π΄ ΠΏΡΠ²Π°ΡΠ° Π»ΠΈΠ½ΠΈΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½Π° Π½Π° Π³Π»Π°Π²Π½ΠΎΡΠΎ ΡΠ΅Π»ΠΎ Π½Π° ΡΠΊΡΠΈΠΏΡΠ°ΡΠ°.
join_data.awk
BEGIN {
FS=",";
batch_num=substr(chunk,7,1);
chunk_id=substr(chunk,15,2);
while(getline < "snp_to_bin.csv") {bin[$1] = $2}
}
{
print $0 > "chunked/chr_"chr"_bin_"bin[$1]"_"batch_num"_"chunk_id".csv"
}
Π’ΠΈΠΌ while(getline...)
Π³ΠΈ Π²ΡΠΈΡΠ° ΡΠΈΡΠ΅ ΡΠ΅Π΄ΠΎΠ²ΠΈ ΠΎΠ΄ Π³ΡΡΠΏΠ°ΡΠ° CSV (Π±ΠΈΠ½), ΠΏΠΎΡΡΠ°Π²ΠΈ ΡΠ° ΠΏΡΠ²Π°ΡΠ° ΠΊΠΎΠ»ΠΎΠ½Π° (ΠΈΠΌΠ΅ Π½Π° SNP) ΠΊΠ°ΠΊΠΎ ΠΊΠ»ΡΡ Π·Π° Π°ΡΠΎΡΠΈΡΠ°ΡΠΈΠ²Π½Π°ΡΠ° Π½ΠΈΠ·Π° bin
Π° Π²ΡΠΎΡΠ°ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ (Π³ΡΡΠΏΠ°) ΠΊΠ°ΠΊΠΎ Π²ΡΠ΅Π΄Π½ΠΎΡΡ. ΠΠΎΡΠΎΠ° Π²ΠΎ Π±Π»ΠΎΠΊΠΎΡ {
}
, ΠΊΠΎΡ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π½Π° ΡΠΈΡΠ΅ Π»ΠΈΠ½ΠΈΠΈ ΠΎΠ΄ Π³Π»Π°Π²Π½Π°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, ΡΠ΅ΠΊΠΎΡΠ° Π»ΠΈΠ½ΠΈΡΠ° ΡΠ΅ ΠΈΡΠΏΡΠ°ΡΠ° Π΄ΠΎ ΠΈΠ·Π»Π΅Π·Π½Π°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΠ° Π΄ΠΎΠ±ΠΈΠ²Π° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΎ ΠΈΠΌΠ΅ Π²ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ Π½Π΅ΡΠ·ΠΈΠ½Π°ΡΠ° Π³ΡΡΠΏΠ° (Π±ΠΈΠ½): ..._bin_"bin[$1]"_...
.
ΠΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ batch_num
ΠΈ chunk_id
ΡΠ΅ ΡΠΎΠ²ΠΏΠ°ΡΠ°Π°Ρ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΈ ΠΎΠ΄ Π³Π°ΡΠΎΠ²ΠΎΠ΄ΠΎΡ, ΠΈΠ·Π±Π΅Π³Π½ΡΠ²Π°ΡΡΠΈ ΡΠΎΡΡΠΎΡΠ±Π° Π½Π° ΡΡΠΊΠ° ΠΈ ΡΠ΅ΠΊΠΎΡΠ° Π½ΠΈΡΠΊΠ° Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ parallel
, ΠΏΠΈΡΠ°Π» Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ».
ΠΠΈΠ΄Π΅ΡΡΠΈ Π³ΠΈ ΡΠ°ΡΡΡΠ»Π°Π² ΡΠΈΡΠ΅ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ ΠΏΠ°ΠΏΠΊΠΈ Π½Π° Ρ ΡΠΎΠΌΠΎΠ·ΠΎΠΌΠΈΡΠ΅ ΠΎΡΡΠ°Π½Π°ΡΠΈ ΠΎΠ΄ ΠΌΠΎΡΠΎΡ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π΅Π½ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ ΡΠΎ AWK, ΡΠ΅Π³Π° ΠΌΠΎΠΆΠ΅Π² Π΄Π° Π½Π°ΠΏΠΈΡΠ°ΠΌ Π΄ΡΡΠ³Π° Bash ΡΠΊΡΠΈΠΏΡΠ° Π·Π° Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π°ΠΌ ΠΏΠΎ Π΅Π΄Π΅Π½ Ρ ΡΠΎΠΌΠΎΠ·ΠΎΠΌ ΠΈ Π΄Π° ΠΈΡΠΏΡΠ°ΡΠ°ΠΌ ΠΏΠΎΠ΄Π»Π°Π±ΠΎΠΊΠΈ ΠΏΠ°ΡΡΠΈΡΠΈΠΎΠ½ΠΈΡΠ°Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π΄ΠΎ S3.
DESIRED_CHR='13'
# Download chromosome data from s3 and split into bins
aws s3 ls $DATA_LOC |
awk '{print $4}' |
grep 'chr'$DESIRED_CHR'.csv' |
parallel "echo 'reading {}'; aws s3 cp "$DATA_LOC"{} - | awk -v chr=""$DESIRED_CHR"" -v chunk="{}" -f split_on_chr_bin.awk"
# Combine all the parallel process chunks to single files and upload to rds using R
ls chunked/ |
cut -d '_' -f 4 |
sort -u |
parallel "echo 'zipping bin {}'; cat chunked/*_bin_{}_*.csv | ./upload_as_rds.R '$S3_DEST'/chr_'$DESIRED_CHR'_bin_{}.rds"
rm chunked/*
Π‘ΡΠ΅Π½Π°ΡΠΈΠΎΡΠΎ ΠΈΠΌΠ° Π΄Π²Π° Π΄Π΅Π»Π° parallel
.
ΠΠΎ ΠΏΡΠ²ΠΈΠΎΡ Π΄Π΅Π», ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΡΠ΅ ΡΠΈΡΠ°Π°Ρ ΠΎΠ΄ ΡΠΈΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΡΡΠΎ ΡΠΎΠ΄ΡΠΆΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° ΡΠ°ΠΊΠ°Π½ΠΈΠΎΡ Ρ
ΡΠΎΠΌΠΎΠ·ΠΎΠΌ, ΠΏΠΎΡΠΎΠ° ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π°Ρ ΠΌΠ΅ΡΡ Π½ΠΈΡΠΊΠΈΡΠ΅, ΠΊΠΎΠΈ Π³ΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π°Ρ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π²ΠΎ ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΈΡΠ΅ Π³ΡΡΠΏΠΈ (Π±ΠΈΠ½). ΠΠ° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π°Ρ ΡΡΠ»ΠΎΠ²ΠΈ Π·Π° ΡΡΠΊΠ° ΠΊΠΎΠ³Π° ΠΏΠΎΠ²Π΅ΡΠ΅ Π½ΠΈΡΠΊΠΈ ΠΏΠΈΡΡΠ²Π°Π°Ρ Π²ΠΎ ΠΈΡΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, AWK Π³ΠΈ ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π° ΠΈΠΌΠΈΡΠ°ΡΠ° Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π·Π° Π΄Π° Π·Π°ΠΏΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΌΠ΅ΡΡΠ°, Π½Π° ΠΏΡ. chr_10_bin_52_batch_2_aa.csv
. ΠΠ°ΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ°, ΠΌΠ½ΠΎΠ³Ρ ΠΌΠ°Π»ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°Π°Ρ Π½Π° Π΄ΠΈΡΠΊΠΎΡ (Π·Π° ΠΎΠ²Π° ΠΊΠΎΡΠΈΡΡΠ΅Π² ΡΠ΅ΡΠ°Π±Π°ΡΡΠ½ΠΈ ΡΠΎΠΌΠ° EBS).
Π’ΡΠ°Π½ΡΠΏΠΎΡΡΠ΅Ρ ΠΎΠ΄ Π²ΡΠΎΡΠΈΠΎΡ Π΄Π΅Π» parallel
ΠΏΠΎΠΌΠΈΠ½ΡΠ²Π° Π½ΠΈΠ· Π³ΡΡΠΏΠΈΡΠ΅ (Π±ΠΈΠ½) ΠΈ Π³ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ° Π½ΠΈΠ²Π½ΠΈΡΠ΅ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»Π½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π²ΠΎ Π·Π°Π΅Π΄Π½ΠΈΡΠΊΠΈ CSV c cat
Π° ΠΏΠΎΡΠΎΠ° Π³ΠΈ ΠΈΡΠΏΡΠ°ΡΠ° Π½Π° ΠΈΠ·Π²ΠΎΠ·.
ΠΠΌΠΈΡΡΠ²Π°ΡΠ΅ Π²ΠΎ Π ?
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²: ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΈΡΠ°ΡΠ΅ stdin
ΠΈ stdout
ΠΎΠ΄ ΡΠΊΡΠΈΠΏΡΠ° R, ΠΈ Π·Π°ΡΠΎΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΡΠ° Π²ΠΎ Π½Π°ΡΡΠΎΠ²ΠΎΠ΄ΠΎΡ.
ΠΠΎΠΆΠ΅Π±ΠΈ ΡΡΠ΅ ΡΠ° Π·Π°Π±Π΅Π»Π΅ΠΆΠ°Π»Π΅ ΠΎΠ²Π°Π° Π»ΠΈΠ½ΠΈΡΠ° Π²ΠΎ Π²Π°ΡΠ°ΡΠ° ΡΠΊΡΠΈΠΏΡΠ° Bash: ...cat chunked/*_bin_{}_*.csv | ./upload_as_rds.R...
. ΠΠΈ ΠΏΡΠ΅Π²Π΅Π΄ΡΠ²Π° ΡΠΈΡΠ΅ ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈ Π³ΡΡΠΏΠ½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ (Π±ΠΈΠ½) Π²ΠΎ ΡΠΊΡΠΈΠΏΡΠ°ΡΠ° R ΠΏΠΎΠ΄ΠΎΠ»Ρ. {}
Π΅ ΠΏΠΎΡΠ΅Π±Π½Π° ΡΠ΅Ρ
Π½ΠΈΠΊΠ° parallel
, ΠΊΠΎΡ Π³ΠΈ Π²ΠΌΠ΅ΡΠ½ΡΠ²Π° ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΡΠΎ Π³ΠΈ ΠΈΡΠΏΡΠ°ΡΠ° Π΄ΠΎ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΎΡ ΠΏΠΎΡΠΎΠΊ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π²ΠΎ ΡΠ°ΠΌΠ°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°. ΠΠΏΡΠΈΡΠ° {#}
ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ ID Π½Π° Π½ΠΈΡΠΊΠ°, ΠΈ {%}
Π³ΠΎ ΠΏΡΠ΅ΡΡΡΠ°Π²ΡΠ²Π° Π±ΡΠΎΡΠΎΡ Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΎΡΠΎ ΠΌΠ΅ΡΡΠΎ (ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΎ, Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π°Ρ ΠΈΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎ). Π‘ΠΏΠΈΡΠΎΠΊΠΎΡ Π½Π° ΡΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΡΠ΄Π΅ Π²ΠΎ
#!/usr/bin/env Rscript
library(readr)
library(aws.s3)
# Read first command line argument
data_destination <- commandArgs(trailingOnly = TRUE)[1]
data_cols <- list(SNP_Name = 'c', ...)
s3saveRDS(
read_csv(
file("stdin"),
col_names = names(data_cols),
col_types = data_cols
),
object = data_destination
)
ΠΠΎΠ³Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° file("stdin")
ΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π° Π½Π° readr::read_csv
, ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΠΏΡΠ΅Π²Π΅Π΄Π΅Π½ΠΈ Π²ΠΎ ΡΠΊΡΠΈΠΏΡΠ°ΡΠ° R ΡΠ΅ Π²ΡΠΈΡΡΠ²Π°Π°Ρ Π²ΠΎ ΡΠ°ΠΌΠΊΠ°, ΠΊΠΎΡΠ° ΠΏΠΎΡΠΎΠ° Π΅ Π²ΠΎ ΡΠΎΡΠΌΠ° .rds
-Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ aws.s3
Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π½Π° S3.
RDS Π΅ Π½Π΅ΡΡΠΎ ΠΊΠ°ΠΊΠΎ ΠΏΠΎΠΌΠ»Π°Π΄Π° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° Parquet, Π±Π΅Π· Π²Π°ΠΆΠ½ΠΈΡΠ΅Π½Π΅ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π·Π²ΡΡΠ½ΠΈΡΠΈ.
ΠΠΎ Π·Π°Π²ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΡΡΠ΅Π½Π°ΡΠΈΠΎΡΠΎ Π·Π° Bash, Π΄ΠΎΠ±ΠΈΠ² ΠΏΠ°ΠΊΠ΅Ρ .rds
-Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π»ΠΎΡΠΈΡΠ°Π½ΠΈ Π²ΠΎ S3, ΡΡΠΎ ΠΌΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π΄Π° ΠΊΠΎΡΠΈΡΡΠ°ΠΌ Π΅ΡΠΈΠΊΠ°ΡΠ½Π° ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ° ΠΈ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ.
Π ΠΏΠΎΠΊΡΠ°Ρ ΡΠΏΠΎΡΡΠ΅Π±Π°ΡΠ° Π½Π° ΡΠΎΠΏΠΈΡΠ°ΡΠΊΠ°ΡΠ° R, ΡΓ¨ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°ΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ Π±ΡΠ·ΠΎ. ΠΠ΅ Π΅ ΠΈΠ·Π½Π΅Π½Π°Π΄ΡΠ²Π°ΡΠΊΠΈ ΡΡΠΎ Π΄Π΅Π»ΠΎΠ²ΠΈΡΠ΅ ΠΎΠ΄ R ΡΡΠΎ ΡΠΈΡΠ°Π°Ρ ΠΈ ΠΏΠΈΡΡΠ²Π°Π°Ρ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠ΅ Π²ΠΈΡΠΎΠΊΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ΠΈ. ΠΠΎ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° Π΅Π΄Π΅Π½ Ρ ΡΠΎΠΌΠΎΠ·ΠΎΠΌ ΡΠΎ ΡΡΠ΅Π΄Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°, ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π·Π°Π²ΡΡΠΈ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΊ C5n.4xl Π·Π° ΠΎΠΊΠΎΠ»Ρ Π΄Π²Π° ΡΠ°ΡΠ°.
ΠΠ³ΡΠ°Π½ΠΈΡΡΠ²Π°ΡΠ° Π½Π° S3
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²: ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅ΡΠ½Π°ΡΠ° ΠΏΠ°ΡΠ΅ΠΊΠ°, S3 ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°ΠΊΡΠ²Π° ΡΠΎ ΠΌΠ½ΠΎΠ³Ρ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ.
ΠΠ΅Π² Π·Π°Π³ΡΠΈΠΆΠ΅Π½ Π΄Π°Π»ΠΈ S3 ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈ ΡΠΎ ΠΌΠ½ΠΎΠ³ΡΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΡΡΠΎ Π±Π΅Π° ΠΏΡΠ΅ΡΡΠ»Π΅Π½ΠΈ Π²ΠΎ Π½Π΅Π³ΠΎ. ΠΠΈ ΠΌΠΎΠΆΠ΅Π» Π΄Π° Π½Π°ΠΏΡΠ°Π²Π°ΠΌ Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π° ΠΈΠΌΠΈΡΠ°ΡΠ° Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅, Π½ΠΎ ΠΊΠ°ΠΊΠΎ Π±ΠΈ Π³ΠΈ Π±Π°ΡΠ°Π» S3?
ΠΠ°ΠΏΠΊΠΈΡΠ΅ Π²ΠΎ S3 ΡΠ΅ ΡΠ°ΠΌΠΎ Π·Π° ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π°ΡΠ΅, Π²ΡΡΡΠ½ΠΎΡΡ ΡΠΈΡΡΠ΅ΠΌΠΎΡ Π½Π΅ Π³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ° ΡΠΈΠΌΠ±ΠΎΠ»ΠΎΡ /
.
Π‘Π΅ ΡΠΈΠ½ΠΈ Π΄Π΅ΠΊΠ° S3 ΡΠ° ΠΏΡΠ΅ΡΡΡΠ°Π²ΡΠ²Π° ΠΏΠ°ΡΠ΅ΠΊΠ°ΡΠ° Π΄ΠΎ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΊΠ°ΠΊΠΎ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π΅Π½ ΠΊΠ»ΡΡ Π²ΠΎ Π½Π΅ΠΊΠΎΡ Π²ΠΈΠ΄ Ρ Π΅Ρ ΡΠ°Π±Π΅Π»Π° ΠΈΠ»ΠΈ Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π±Π°Π·ΠΈΡΠ°Π½Π° Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈ. ΠΠΎΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠΌΠ΅ΡΠ° ΠΊΠ°ΠΊΠΎ ΡΠ°Π±Π΅Π»Π°, Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠΌΠ΅ΡΠ°Π°Ρ Π·Π° Π·Π°ΠΏΠΈΡΠΈ Π²ΠΎ ΡΠ°Π° ΡΠ°Π±Π΅Π»Π°.
ΠΠΈΠ΄Π΅ΡΡΠΈ Π±ΡΠ·ΠΈΠ½Π°ΡΠ° ΠΈ Π΅ΡΠΈΠΊΠ°ΡΠ½ΠΎΡΡΠ° ΡΠ΅ Π²Π°ΠΆΠ½ΠΈ Π·Π° Π΄Π° ΡΠ΅ ΠΎΡΡΠ²Π°ΡΠΈ ΠΏΡΠΎΡΠΈΡ Π²ΠΎ ΠΠΌΠ°Π·ΠΎΠ½, Π½Π΅ Π΅ ΠΈΠ·Π½Π΅Π½Π°Π΄ΡΠ²Π°ΡΠ΅ ΡΡΠΎ ΠΎΠ²ΠΎΡ ΡΠΈΡΡΠ΅ΠΌ Π·Π° ΠΏΠ°ΡΠ΅ΠΊΠ° Π½Π° ΠΊΠ»ΡΡΠΎΡ ΠΊΠ°ΠΊΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Π΅ Π½Π΅Π²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½. Π‘Π΅ ΠΎΠ±ΠΈΠ΄ΠΎΠ² Π΄Π° Π½Π°ΡΠ΄Π°ΠΌ ΡΠ°ΠΌΠ½ΠΎΡΠ΅ΠΆΠ°: Π·Π° Π΄Π° Π½Π΅ ΠΌΠΎΡΠ°ΠΌ Π΄Π° ΠΏΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΠΌ ΠΌΠ½ΠΎΠ³Ρ Π±Π°ΡΠ°ΡΠ° Π·Π° Π΄ΠΎΠ±ΠΈΠ²Π°ΡΠ΅, ΡΡΠΊΡ Π±Π°ΡΠ°ΡΠ°ΡΠ° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Π°Ρ Π±ΡΠ·ΠΎ. Π‘Π΅ ΠΈΡΠΏΠΎΡΡΠ°Π²ΠΈ Π΄Π΅ΠΊΠ° Π½Π°ΡΠ΄ΠΎΠ±ΡΠΎ Π΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Π°Ρ ΠΎΠΊΠΎΠ»Ρ 20 ΠΈΠ»ΡΠ°Π΄ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π·Π° ΠΊΠ°Π½ΡΠΈ. ΠΠΈΡΠ»Π°ΠΌ Π΄Π΅ΠΊΠ° Π°ΠΊΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌΠ΅ Π΄Π° ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΌΠ΅, ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΠΌΠ΅ Π·Π³ΠΎΠ»Π΅ΠΌΡΠ²Π°ΡΠ΅ Π½Π° Π±ΡΠ·ΠΈΠ½Π°ΡΠ° (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠ΅ ΡΠΏΠ΅ΡΠΈΡΠ°Π»Π½Π° ΠΊΠΎΡΠΏΠ° ΡΠ°ΠΌΠΎ Π·Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, Π° ΡΠΎ ΡΠΎΠ° Π΄Π° ΡΠ° Π½Π°ΠΌΠ°Π»ΠΈΠΌΠ΅ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° ΡΠ°Π±Π΅Π»Π°ΡΠ° Π·Π° ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅). ΠΠΎ, Π½Π΅ΠΌΠ°ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ ΠΈΠ»ΠΈ ΠΏΠ°ΡΠΈ Π·Π° ΠΏΠΎΠ½Π°ΡΠ°ΠΌΠΎΡΠ½ΠΈ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈ.
Π¨ΡΠΎ Π΅ ΡΠΎ Π²ΠΊΡΡΡΠ΅Π½Π°ΡΠ° ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡ?
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²: ΠΏΡΠΈΡΠΈΠ½Π° Π±ΡΠΎΡ Π΅Π΄Π΅Π½ Π·Π° ΠΏΠΎΡΡΠΎΡΠ΅Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π΅ ΠΏΡΠ΅Π΄Π²ΡΠ΅ΠΌΠ΅Π½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π½Π° Π½Π°ΡΠΈΠ½ΠΎΡ Π½Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅.
ΠΠΎ ΠΎΠ²ΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΌΠ½ΠΎΠ³Ρ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ Π·Π°ΠΏΡΠ°ΡΠ°ΡΠ΅: βΠΠΎΡΡΠΎ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ΅ΡΡΠΈΡΠ°Π»Π΅Π½ ΡΠΎΡΠΌΠ°Ρ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°? ΠΡΠΈΡΠΈΠ½Π°ΡΠ° Π»Π΅ΠΆΠΈ Π²ΠΎ Π±ΡΠ·ΠΈΠ½Π°ΡΠ° Π½Π° Π²ΡΠΈΡΡΠ²Π°ΡΠ΅ (Π²ΡΠΈΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° CSV-Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π½Π° gzipped Π±Π΅ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ 7 ΠΏΠ°ΡΠΈ ΠΏΠΎΠ΄ΠΎΠ»Π³ΠΎ) ΠΈ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡΠ° ΡΠΎ Π½Π°ΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈ ΡΠ΅ΠΊΠΎΠ²ΠΈ. ΠΠΎΠΆΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π΄Π° ΡΠ°Π·ΠΌΠΈΡΠ»Π°ΠΌ Π΄Π°Π»ΠΈ R ΠΌΠΎΠΆΠ΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° Π²ΡΠΈΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΡΠΎ Parquet (ΠΈΠ»ΠΈ ΡΡΡΠ΅Π»ΠΊΠ°) Π±Π΅Π· ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ΅ Spark. Π‘ΠΈΡΠ΅ Π²ΠΎ Π½Π°ΡΠ°ΡΠ° Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠΈΡΠ° ΠΊΠΎΡΠΈΡΡΠ°Ρ R, ΠΈ Π°ΠΊΠΎ ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΈ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°ΠΌ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π²ΠΎ Π΄ΡΡΠ³ ΡΠΎΡΠΌΠ°Ρ, ΡΓ¨ ΡΡΡΠ΅ Π³ΠΈ ΠΈΠΌΠ°ΠΌ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡΡΠ°Π»Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ°ΠΌ ΡΠ°ΠΌΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π΄Π° Π³ΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΠΌ Π³Π°ΡΠΎΠ²ΠΎΠ΄ΠΎΡ.
ΠΠΎΠ΄Π΅Π»Π±Π° Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ°
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²: ΠΠ΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π°ΡΡΠ΅ ΡΠ΅ ΡΠ°ΡΠ½ΠΎ Π΄Π° Π³ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ ΠΌΠ΅ΡΡΠ°, ΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π³ΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΡ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠΎΠ°.
ΠΠΎ Π΄Π΅Π±Π°Π³ΠΈΡΠ°Π² ΡΠ°Π±ΠΎΡΠ½ΠΈΠΎΡ ΡΠ΅ΠΊ Π½Π° Π΅Π΄Π΅Π½ Ρ
ΡΠΎΠΌΠΎΠ·ΠΎΠΌ, ΡΠ΅Π³Π° ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΠΌ ΡΠΈΡΠ΅ Π΄ΡΡΠ³ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ.
Π‘Π°ΠΊΠ°Π² Π΄Π° ΠΏΠΎΠ΄ΠΈΠ³Π½Π°ΠΌ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΡΠΈ Π½Π° EC2 Π·Π° ΠΊΠΎΠ½Π²Π΅ΡΠ·ΠΈΡΠ°, Π½ΠΎ Π²ΠΎ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΠ΅ ΠΏΠ»Π°ΡΠ΅Π² Π΄Π° Π½Π΅ Π΄ΠΎΠ±ΠΈΡΠ°ΠΌ ΠΌΠ½ΠΎΠ³Ρ Π½Π΅ΡΡΠ°ΠΌΠ½ΠΎΡΠ΅ΠΆΠ΅Π½ ΡΠΎΠ²Π°Ρ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π·Π°Π΄Π°ΡΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° (ΠΈΡΡΠΎ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Spark ΡΡΡΠ°Π΄Π°ΡΠ΅ ΠΎΠ΄ Π½Π΅Π±Π°Π»Π°Π½ΡΠΈΡΠ°Π½ΠΈ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ). ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ, Π½Π΅ ΠΌΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ°ΡΠ΅ Π΄Π° ΠΏΠΎΠ΄ΠΈΠ³Π½Π°ΠΌ Π΅Π΄Π½Π° ΠΈΠ½ΡΡΠ°Π½ΡΠ° ΠΏΠΎ Ρ
ΡΠΎΠΌΠΎΠ·ΠΎΠΌ, Π±ΠΈΠ΄Π΅ΡΡΠΈ Π·Π° ΡΠΌΠ΅ΡΠΊΠΈΡΠ΅ AWS ΠΈΠΌΠ° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΡΠ²Π°ΡΠ΅ ΠΎΠ΄ 10 ΠΏΡΠΈΠΌΠ΅ΡΠΎΡΠΈ.
ΠΠΎΡΠΎΠ° ΡΠ΅ΡΠΈΠ² Π΄Π° Π½Π°ΠΏΠΈΡΠ°ΠΌ ΡΠΊΡΠΈΠΏΡΠ° Π²ΠΎ R Π·Π° Π΄Π° Π³ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΌ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ ΠΌΠ΅ΡΡΠ° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°.
ΠΡΠ²ΠΎ, ΠΏΠΎΠ±Π°ΡΠ°Π² ΠΎΠ΄ S3 Π΄Π° ΠΏΡΠ΅ΡΠΌΠ΅ΡΠ° ΠΊΠΎΠ»ΠΊΡ ΠΏΡΠΎΡΡΠΎΡ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π·Π°ΡΠ°ΡΠ° ΡΠ΅ΠΊΠΎΡ Ρ ΡΠΎΠΌΠΎΠ·ΠΎΠΌ.
library(aws.s3)
library(tidyverse)
chr_sizes <- get_bucket_df(
bucket = '...', prefix = '...', max = Inf
) %>%
mutate(Size = as.numeric(Size)) %>%
filter(Size != 0) %>%
mutate(
# Extract chromosome from the file name
chr = str_extract(Key, 'chr.{1,4}.csv') %>%
str_remove_all('chr|.csv')
) %>%
group_by(chr) %>%
summarise(total_size = sum(Size)/1e+9) # Divide to get value in GB
# A tibble: 27 x 2
chr total_size
<chr> <dbl>
1 0 163.
2 1 967.
3 10 541.
4 11 611.
5 12 542.
6 13 364.
7 14 375.
8 15 372.
9 16 434.
10 17 443.
# β¦ with 17 more rows
ΠΠΎΡΠΎΠ° Π½Π°ΠΏΠΈΡΠ°Π² ΡΡΠ½ΠΊΡΠΈΡΠ° ΠΊΠΎΡΠ° ΡΠ° Π·Π΅ΠΌΠ° Π²ΠΊΡΠΏΠ½Π°ΡΠ° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°, Π³ΠΎ ΠΌΠ΅ΡΠ° ΡΠ΅Π΄ΠΎΡΠ»Π΅Π΄ΠΎΡ Π½Π° Ρ
ΡΠΎΠΌΠΎΠ·ΠΎΠΌΠΈΡΠ΅, Π³ΠΈ Π΄Π΅Π»ΠΈ Π²ΠΎ Π³ΡΡΠΏΠΈ num_jobs
ΠΈ Π²ΠΈ ΠΊΠ°ΠΆΡΠ²Π° ΠΊΠΎΠ»ΠΊΡ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½ΠΈ Π½Π° ΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π·Π°Π΄Π°ΡΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°.
num_jobs <- 7
# How big would each job be if perfectly split?
job_size <- sum(chr_sizes$total_size)/7
shuffle_job <- function(i){
chr_sizes %>%
sample_frac() %>%
mutate(
cum_size = cumsum(total_size),
job_num = ceiling(cum_size/job_size)
) %>%
group_by(job_num) %>%
summarise(
job_chrs = paste(chr, collapse = ','),
total_job_size = sum(total_size)
) %>%
mutate(sd = sd(total_job_size)) %>%
nest(-sd)
}
shuffle_job(1)
# A tibble: 1 x 2
sd data
<dbl> <list>
1 153. <tibble [7 Γ 3]>
ΠΠΎΡΠΎΠ° ΠΈΡΡΡΡΠ°Π² Π½ΠΈΠ· ΠΈΠ»ΡΠ°Π΄Π° ΠΌΠ΅ΡΠ°Π²ΠΈΠ½ΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ purrr ΠΈ Π³ΠΎ ΠΈΠ·Π±ΡΠ°Π² Π½Π°ΡΠ΄ΠΎΠ±ΡΠΎΡΠΎ.
1:1000 %>%
map_df(shuffle_job) %>%
filter(sd == min(sd)) %>%
pull(data) %>%
pluck(1)
Π’Π°ΠΊΠ° Π·Π°Π²ΡΡΠΈΠ² ΡΠΎ Π·Π±ΠΈΡ Π½Π° Π·Π°Π΄Π°ΡΠΈ ΠΊΠΎΠΈ Π±Π΅Π° ΠΌΠ½ΠΎΠ³Ρ ΡΠ»ΠΈΡΠ½ΠΈ ΠΏΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°. ΠΠΎΡΠΎΠ° ΠΎΡΡΠ°Π½Π° ΡΠ°ΠΌΠΎ Π΄Π° Π³ΠΎ Π·Π°Π²ΠΈΡΠΊΠ°ΠΌ ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΎΡΠΎ ΡΡΠ΅Π½Π°ΡΠΈΠΎ Π·Π° Bash Π²ΠΎ Π³ΠΎΠ»Π΅ΠΌΠ° ΡΠ°ΠΌΠΊΠ° for
. ΠΠ²Π°Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ° ΡΡΠ°Π΅ΡΠ΅ ΠΎΠΊΠΎΠ»Ρ 10 ΠΌΠΈΠ½ΡΡΠΈ Π·Π° Π΄Π° ΡΠ΅ Π½Π°ΠΏΠΈΡΠ΅. Π ΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠΌΠ°Π»ΠΊΡ ΠΎΡΠΊΠΎΠ»ΠΊΡ ΡΡΠΎ Π±ΠΈ ΠΏΠΎΡΡΠΎΡΠΈΠ» Π·Π° ΡΠ°ΡΠ½ΠΎ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π΄ΠΎΠΊΠΎΠ»ΠΊΡ ΡΠΈΠ΅ ΡΠ΅ Π½Π΅ΡΡΠ°ΠΌΠ½ΠΎΡΠ΅ΠΆΠ΅Π½ΠΈ. ΠΠ°ΡΠΎΠ°, ΠΌΠΈΡΠ»Π°ΠΌ Π΄Π΅ΠΊΠ° Π±Π΅Π² Π²ΠΎ ΠΏΡΠ°Π²ΠΎ ΡΠΎ ΠΎΠ²Π°Π° ΠΏΡΠ΅Π»ΠΈΠΌΠΈΠ½Π°ΡΠ½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ°.
for DESIRED_CHR in "16" "9" "7" "21" "MT"
do
# Code for processing a single chromosome
fi
ΠΠ° ΠΊΡΠ°ΡΠΎΡ ΡΠ° Π΄ΠΎΠ΄Π°Π²Π°ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° ΠΈΡΠΊΠ»ΡΡΡΠ²Π°ΡΠ΅:
sudo shutdown -h now
... ΠΈ ΡΓ¨ ΡΡΠΏΠ΅Π°! ΠΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ AWS CLI, ΠΏΠΎΠ΄ΠΈΠ³Π½Π°Π² ΠΏΡΠΈΠΌΠ΅ΡΠΎΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠ° ΠΎΠΏΡΠΈΡΠ°ΡΠ° user_data
ΠΈΠΌ Π΄Π°Π΄Π΅ Bash ΡΠΊΡΠΈΠΏΡΠΈ Π½Π° Π½ΠΈΠ²Π½ΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°. Π’ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ΅Π° ΠΈ ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ° Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ, ΡΠ°ΠΊΠ° ΡΡΠΎ Π½Π΅ ΠΏΠ»Π°ΡΠ°Π² Π·Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΡΠΊΠ° ΠΌΠΎΡ.
aws ec2 run-instances ...
--tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=<<job_name>>}]"
--user-data file://<<job_script_loc>>
ΠΡΠ΄Π΅ Π΄Π° ΡΠ΅ ΡΠΏΠ°ΠΊΡΠ²Π°ΠΌΠ΅!
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²: API ΡΡΠ΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π΅Π½ Π·Π°ΡΠ°Π΄ΠΈ Π»Π΅ΡΠ½ΠΎΡΠΈΡΠ° ΠΈ ΡΠ»Π΅ΠΊΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡ ΠΏΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΡΠΎ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ Π³ΠΈ Π΄ΠΎΠ±ΠΈΠ² ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π½Π° Π²ΠΈΡΡΠΈΠ½ΡΠΊΠΎΡΠΎ ΠΌΠ΅ΡΡΠΎ ΠΈ ΡΠΎΡΠΌΠ°. ΠΡΡΠ°Π½ΡΠ²Π°ΡΠ΅ ΡΠ°ΠΌΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΠ΅Π΄Π½ΠΎΡΡΠ°Π²ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΡΡΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° Π΄Π° ΠΈΠΌ ΡΠ΅ ΠΎΠ»Π΅ΡΠ½ΠΈ Π½Π° ΠΌΠΎΠΈΡΠ΅ ΠΊΠΎΠ»Π΅Π³ΠΈ. Π‘Π°ΠΊΠ°Π² Π΄Π° Π½Π°ΠΏΡΠ°Π²Π°ΠΌ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ API Π·Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π±Π°ΡΠ°ΡΠ°. ΠΠΊΠΎ Π²ΠΎ ΠΈΠ΄Π½ΠΈΠ½Π° ΡΠ΅ΡΠ°ΠΌ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΡΡΠ»Π°ΠΌ ΠΎΠ΄ .rds
Π½Π° ΠΠ°ΡΠΊΠ΅Ρ ΡΠ°ΡΠ»ΠΎΠ²ΠΈ, ΡΠΎΠ³Π°Ρ ΠΎΠ²Π° ΡΡΠ΅Π±Π° Π΄Π° ΠΌΠΈ Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π° Π½Π΅ Π½Π° ΠΌΠΎΠΈΡΠ΅ ΠΊΠΎΠ»Π΅Π³ΠΈ. ΠΠ° ΠΎΠ²Π° ΡΠ΅ΡΠΈΠ² Π΄Π° Π½Π°ΠΏΡΠ°Π²Π°ΠΌ Π²Π½Π°ΡΡΠ΅ΡΠ΅Π½ R ΠΏΠ°ΠΊΠ΅Ρ.
ΠΠ·Π³ΡΠ°Π΄Π΅ΡΠ΅ ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠ°ΡΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π΅Π½ ΠΏΠ°ΠΊΠ΅Ρ ΠΊΠΎΡ ΡΠΎΠ΄ΡΠΆΠΈ ΡΠ°ΠΌΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΎΠΊΠΎΠ»Ρ Π΅Π΄Π½Π° ΡΡΠ½ΠΊΡΠΈΡΠ° get_snp
. ΠΠ°ΠΏΡΠ°Π²ΠΈΠ² ΠΈ Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΠ° Π·Π° ΠΌΠΎΠΈΡΠ΅ ΠΊΠΎΠ»Π΅Π³ΠΈ
ΠΠ°ΠΌΠ΅ΡΠ½ΠΎ ΠΊΠ΅ΡΠΈΡΠ°ΡΠ΅
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²: ΠΠΊΠΎ Π²Π°ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠ΅ Π΄ΠΎΠ±ΡΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΈ, ΠΊΠ΅ΡΠΈΡΠ°ΡΠ΅ΡΠΎ ΡΠ΅ Π±ΠΈΠ΄Π΅ Π»Π΅ΡΠ½ΠΎ!
ΠΠΈΠ΄Π΅ΡΡΠΈ Π΅Π΄Π΅Π½ ΠΎΠ΄ Π³Π»Π°Π²Π½ΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈ ΡΠ΅ΠΊΠΎΠ²ΠΈ Π³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈ ΠΈΡΡΠΈΠΎΡ ΠΌΠΎΠ΄Π΅Π» Π½Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ SNP, ΡΠ΅ΡΠΈΠ² Π΄Π° Π³ΠΎ ΠΈΡΠΊΠΎΡΠΈΡΡΠ°ΠΌ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ΡΠΎ Π²ΠΎ ΠΌΠΎΡΠ° ΠΊΠΎΡΠΈΡΡ. ΠΡΠΈ ΠΏΡΠ΅Π½ΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΏΡΠ΅ΠΊΡ SNP, ΡΠΈΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ΄ Π³ΡΡΠΏΠ°ΡΠ° (Π±ΠΈΠ½) ΡΠ΅ ΠΏΡΠΈΠΊΠ°ΡΠ΅Π½ΠΈ Π½Π° Π²ΡΠ°ΡΠ΅Π½ΠΈΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠ΄Π½ΠΎΡΠ½ΠΎ, ΡΡΠ°ΡΠΈΡΠ΅ ΠΏΡΠ°ΡΠ°ΡΠ° ΠΌΠΎΠΆΠ°Ρ (ΡΠ΅ΠΎΡΠ΅ΡΡΠΊΠΈ) Π΄Π° ΡΠ° Π·Π°Π±ΡΠ·Π°Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° Π½ΠΎΠ²ΠΈΡΠ΅ Π±Π°ΡΠ°ΡΠ°.
# Part of get_snp()
...
# Test if our current snp data has the desired snp.
already_have_snp <- desired_snp %in% prev_snp_results$snps_in_bin
if(!already_have_snp){
# Grab info on the bin of the desired snp
snp_results <- get_snp_bin(desired_snp)
# Download the snp's bin data
snp_results$bin_data <- aws.s3::s3readRDS(object = snp_results$data_loc)
} else {
# The previous snp data contained the right bin so just use it
snp_results <- prev_snp_results
}
...
ΠΠΎΠ³Π° Π³ΠΎ Π³ΡΠ°Π΄Π΅Π² ΠΏΠ°ΠΊΠ΅ΡΠΎΡ, ΠΈΡΡΡΡΠ°Π² ΠΌΠ½ΠΎΠ³Ρ ΡΠ΅ΠΏΠ΅ΡΠΈ Π·Π° Π΄Π° ΡΠ° ΡΠΏΠΎΡΠ΅Π΄Π°ΠΌ Π±ΡΠ·ΠΈΠ½Π°ΡΠ° ΠΊΠΎΠ³Π° ΠΊΠΎΡΠΈΡΡΠ°ΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ. ΠΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π°ΠΌ Π΄Π° Π½Π΅ Π³ΠΎ Π·Π°Π½Π΅ΠΌΠ°ΡΠΈΡΠ΅ ΠΎΠ²Π°, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΠΏΠΎΠ½Π΅ΠΊΠΎΠ³Π°Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΡΠ΅ Π½Π΅ΠΎΡΠ΅ΠΊΡΠ²Π°Π½ΠΈ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, dplyr::filter
Π±Π΅ΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠ±ΡΠ·ΠΎ ΠΎΠ΄ ΡΠ½ΠΈΠΌΠ°ΡΠ΅ΡΠΎ ΡΠ΅Π΄ΠΎΠ²ΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠΈΠ»ΡΡΠΈΡΠ°ΡΠ΅ Π·Π°ΡΠ½ΠΎΠ²Π°Π½ΠΎ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°ΡΠ΅, Π° ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ΅ΡΠΎ Π½Π° Π΅Π΄Π½Π° ΠΊΠΎΠ»ΠΎΠ½Π° ΠΎΠ΄ ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π°ΡΠ° ΡΠ°ΠΌΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π±Π΅ΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠ±ΡΠ·ΠΎ ΠΎΡΠΊΠΎΠ»ΠΊΡ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΡΠΎ Π½Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠ°ΡΠ° Π·Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°ΡΠ΅.
ΠΠ΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ ΠΈΠΌΠ°ΡΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ Π΄Π΅ΠΊΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΡ prev_snp_results
Π³ΠΎ ΡΠΎΠ΄ΡΠΆΠΈ ΠΊΠ»ΡΡΠΎΡ snps_in_bin
. ΠΠ²Π° Π΅ Π½ΠΈΠ·Π° ΠΎΠ΄ ΡΠΈΡΠ΅ ΡΠ½ΠΈΠΊΠ°ΡΠ½ΠΈ SNP-ΠΈ Π²ΠΎ Π³ΡΡΠΏΠ° (ΠΊΠ°Π½ΡΠ°), ΡΡΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π±ΡΠ·ΠΎ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ Π΄Π°Π»ΠΈ Π²Π΅ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΎΠ΄ ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΎΡΠΎ Π±Π°ΡΠ°ΡΠ΅. ΠΡΡΠΎ ΡΠ°ΠΊΠ°, Π³ΠΎ ΠΎΠ»Π΅ΡΠ½ΡΠ²Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ΡΠ²Π°ΡΠ΅ΡΠΎ Π½ΠΈΠ· ΡΠΈΡΠ΅ SNP Π²ΠΎ Π³ΡΡΠΏΠ° (ΠΊΠ°Π½ΡΠ°) ΡΠΎ ΠΎΠ²ΠΎΡ ΠΊΠΎΠ΄:
# Get bin-mates
snps_in_bin <- my_snp_results$snps_in_bin
for(current_snp in snps_in_bin){
my_snp_results <- get_snp(current_snp, my_snp_results)
# Do something with results
}
ΠΠ°ΠΎΠ΄ΠΈ
Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΠΌΠ΅ (ΠΈ ΠΏΠΎΡΠ½Π°Π²ΠΌΠ΅ ΡΠ΅ΡΠΈΠΎΠ·Π½ΠΎ) Π΄Π° Π²ΠΎΠ΄ΠΈΠΌΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΡΠ° ΠΊΠΎΠΈ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ Π½ΠΈ Π±Π΅Π° Π½Π΅Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ. ΠΠ°ΡΠ΄ΠΎΠ±ΡΠΎΡΠΎ Π½Π΅ΡΡΠΎ Π΅ ΡΡΠΎ ΠΌΠΎΠΈΡΠ΅ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠΈΡΠΊΠΈ ΠΊΠΎΠ»Π΅Π³ΠΈ Π½Π΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ°Π·ΠΌΠΈΡΠ»ΡΠ²Π°Π°Ρ Π·Π° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΊΠΎΠΌΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ. Π’ΠΈΠ΅ ΡΠ°ΠΌΠΎ ΠΈΠΌΠ°Π°Ρ ΡΡΠ½ΠΊΡΠΈΡΠ° ΠΊΠΎΡΠ° ΡΠ°Π±ΠΎΡΠΈ.
Π ΠΈΠ°ΠΊΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΎΡ Π³ΠΈ ΡΡΠ΅Π΄ΠΈ ΠΎΠ΄ Π΄Π΅ΡΠ°Π»ΠΈΡΠ΅, ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΠΎΠ² Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²Π°ΠΌ ΡΠΎΡΠΌΠ°ΡΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π΅Π½ Π·Π° Π΄Π° ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΡΠ°ΡΠ°Ρ Π°ΠΊΠΎ Π½Π΅Π½Π°Π΄Π΅ΡΠ½ΠΎ ΠΈΡΡΠ΅Π·Π½Π°ΠΌ ΡΡΡΠ΅...
ΠΡΠ·ΠΈΠ½Π°ΡΠ° Π΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π·Π³ΠΎΠ»Π΅ΠΌΠ΅Π½Π°. ΠΠΈΠ΅ ΠΎΠ±ΠΈΡΠ½ΠΎ ΡΠΊΠ΅Π½ΠΈΡΠ°ΠΌΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎ Π·Π½Π°ΡΠ°ΡΠ½ΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈ ΠΎΠ΄ Π³Π΅Π½ΠΎΠΌ. ΠΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ, Π½Π΅ ΠΌΠΎΠΆΠ΅Π²ΠΌΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠ΅ ΠΎΠ²Π° (ΡΠ΅ ΠΈΡΠΏΠΎΡΡΠ°Π²ΠΈ Π΄Π΅ΠΊΠ° Π΅ ΠΏΡΠ΅ΠΌΠ½ΠΎΠ³Ρ ΡΠΊΠ°ΠΏΠΎ), Π½ΠΎ ΡΠ΅Π³Π°, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° Π³ΡΡΠΏΠ°ΡΠ° (Π±ΠΈΠ½) ΠΈ ΠΊΠ΅ΡΠΈΡΠ°ΡΠ΅ΡΠΎ, Π±Π°ΡΠ°ΡΠ΅ΡΠΎ Π·Π° Π΅Π΄Π΅Π½ SNP ΡΡΠ°Π΅ Π²ΠΎ ΠΏΡΠΎΡΠ΅ΠΊ ΠΏΠΎΠΌΠ°Π»ΠΊΡ ΠΎΠ΄ 0,1 ΡΠ΅ΠΊΡΠ½Π΄Π°, Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π΅ ΡΠΎΠ»ΠΊΡ Π½ΠΈΡΠΊΠΈ Π΄Π΅ΠΊΠ° ΡΡΠΎΡΠΎΡΠΈΡΠ΅ Π·Π° S3 ΡΠ΅ ΠΊΠΈΠΊΠΈΡΠΈΡΠΊΠΈ.
ΠΠ΅ΠΎΠ΄Π°ΠΌΠ½Π° ΠΌΠ΅ ΡΡΠ°Π²ΠΈΡΠ° Π²ΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π° Π½Π° ΡΠ°ΡΠΏΡΠ°Π²ΠΈΠΈ 25+ Π’Π Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π° Π³Π΅Π½ΠΎΡΠΈΠΏΠΈΡΠ°ΡΠ΅ Π·Π° ΠΌΠΎΡΠ°ΡΠ° Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠΈΡΠ°. ΠΠΎΠ³Π° ΠΏΠΎΡΠ½Π°Π², ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΡΠΎ Π½Π° ΠΈΡΠΊΡΠ° ΡΡΠ°Π΅ΡΠ΅ 8 ΠΌΠΈΠ½ΡΡΠΈ ΠΈ ΡΠΈΠ½Π΅ΡΠ΅ 20 Π΄ΠΎΠ»Π°ΡΠΈ Π·Π° Π±Π°ΡΠ°ΡΠ΅ SNP. ΠΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΡΠΎ Π½Π° AWK+
#rstats to process, it now takes less than a 10th of a second and costs $0.00001. My personal#ΠΠΎΠ»Π΅ΠΌ ΠΏΠΎΠ΄Π°ΡΠΎΠΊ ΠΏΠΎΠ±Π΅Π΄ΠΈ.pic.twitter.com/ANOXVGrmkk β ΠΠΈΠΊ Π‘ΡΡΠ°ΡΠ΅Ρ (@NicholasStrayer)
ΠΠΎΠΆΠ΅ 30, 2019
ΠΠ°ΠΊΠ»ΡΡΠΎΠΊ
ΠΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ° Π²ΠΎΠΎΠΏΡΡΠΎ Π½Π΅ Π΅ Π²ΠΎΠ΄ΠΈΡ. Π Π΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊΠΎ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»Π½ΠΎ, ΠΈ ΡΠ΅ΡΠΈΡΠΈ ΡΠΈΠ³ΡΡΠ½ΠΎ Π½Π΅ Π΅ ΠΎΠΏΡΠΈΠΌΠ°Π»Π½ΠΎ. ΠΠ°ΠΏΡΠΎΡΠΈΠ², ΡΠΎΠ° Π΅ ΠΏΠ°ΡΠΎΠΏΠΈΡ. Π‘Π°ΠΊΠ°ΠΌ Π΄ΡΡΠ³ΠΈΡΠ΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ°Ρ Π΄Π΅ΠΊΠ° ΡΠ°ΠΊΠ²ΠΈΡΠ΅ ΠΎΠ΄Π»ΡΠΊΠΈ Π½Π΅ ΠΈΠ·Π³Π»Π΅Π΄Π°Π°Ρ ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΡΠΎΡΠΌΠΈΡΠ°Π½ΠΈ Π²ΠΎ Π³Π»Π°Π²Π°ΡΠ°, ΡΠΈΠ΅ ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΠΎΠ±ΠΈΠ΄ΠΈ ΠΈ Π³ΡΠ΅ΡΠΊΠΈ. ΠΡΡΠΎ ΡΠ°ΠΊΠ°, Π°ΠΊΠΎ Π±Π°ΡΠ°ΡΠ΅ Π½Π°ΡΡΠ½ΠΈΠΊ Π·Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΠΈΠΌΠ°ΡΡΠ΅ Π½Π° ΡΠΌ Π΄Π΅ΠΊΠ° Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΠΎΠ²ΠΈΠ΅ Π°Π»Π°ΡΠΊΠΈ Π±Π°ΡΠ° ΠΈΡΠΊΡΡΡΠ²ΠΎ, Π° ΠΈΡΠΊΡΡΡΠ²ΠΎΡΠΎ ΡΠΈΠ½ΠΈ ΠΏΠ°ΡΠΈ. Π‘ΡΠ΅ΡΠ΅Π½ ΡΡΠΌ ΡΡΠΎ ΠΈΠΌΠ°Π² ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π° ΠΏΠ»Π°ΡΠ°ΠΌ, Π½ΠΎ ΠΌΠ½ΠΎΠ³Ρ Π΄ΡΡΠ³ΠΈ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΠ° Π·Π°Π²ΡΡΠ°Ρ ΠΈΡΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΎ ΠΎΠ΄ ΠΌΠ΅Π½Π΅, Π½ΠΈΠΊΠΎΠ³Π°Ρ Π½Π΅ΠΌΠ° Π΄Π° ΠΈΠΌΠ°Π°Ρ ΠΌΠΎΠΆΠ½ΠΎΡΡ ΠΏΠΎΡΠ°Π΄ΠΈ Π½Π΅ΠΌΠ°ΡΠ΅ ΠΏΠ°ΡΠΈ Π²ΠΎΠΎΠΏΡΡΠΎ Π΄Π° ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π°Ρ.
ΠΠ»Π°ΡΠΊΠΈΡΠ΅ Π·Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠ΅ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΈ. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅, ΡΠ΅ΡΠΈΡΠΈ ΡΠΈΠ³ΡΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΠΎΠ±ΡΠ·ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΠΏΠ°ΠΌΠ΅ΡΠ½ΠΈ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ Π·Π° ΡΠΈΡΡΠ΅ΡΠ΅, ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΡΠ²Π°ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΠ° ΠΊΡΠ°ΡΠΎΡ ΡΠ΅ ΡΠ²Π΅Π΄ΡΠ²Π° Π½Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΡΡΠΎΡΠΎΡΠΈ ΠΈ ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ²ΠΊΠΈ.
Π¨ΡΠΎ Π½Π°ΡΡΠΈΠ²:
- Π½Π΅ ΠΏΠΎΡΡΠΎΠΈ Π΅Π²ΡΠΈΠ½ Π½Π°ΡΠΈΠ½ Π΄Π° ΡΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π°Ρ 25 Π’Π ΠΈΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎ;
- ΠΠΈΠ΄Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΈ ΡΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° Π²Π°ΡΠΈΡΠ΅ ΠΠ°ΡΠΊΠ΅Ρ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΠΈ Π½ΠΈΠ²Π½Π°ΡΠ° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΠ°;
- ΠΠ°ΡΡΠΈΡΠΈΠΈΡΠ΅ Π²ΠΎ Spark ΠΌΠΎΡΠ° Π΄Π° Π±ΠΈΠ΄Π°Ρ ΠΈΠ·Π±Π°Π»Π°Π½ΡΠΈΡΠ°Π½ΠΈ;
- ΠΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ, Π½ΠΈΠΊΠΎΠ³Π°Ρ Π½Π΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π°ΡΡΠ΅ ΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ 2,5 ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ;
- Π‘ΠΎΡΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π΅ ΡΓ¨ ΡΡΡΠ΅ ΡΠ΅ΡΠΊΠΎ, ΠΊΠ°ΠΊΠΎ ΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Spark;
- ΠΏΠΎΠ½Π΅ΠΊΠΎΠ³Π°Ρ ΡΠΏΠ΅ΡΠΈΡΠ°Π»Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π±Π°ΡΠ°Π°Ρ ΠΏΠΎΡΠ΅Π±Π½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠ°;
- ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π² Spark ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±ΡΡΡΡΠΎ, Π½ΠΎ ΠΏΠ°ΡΡΠΈΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΡ Π΅ΡΡ ΠΎΠ±Ρ ΠΎΠ΄ΠΈΡΡΡ Π΄ΠΎΡΠΎΠ³ΠΎ;
- Π½Π΅ ΡΠΏΠΈΡ ΠΊΠΎΠ³Π° ΡΠ΅ ΡΡΠ°Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²ΠΈΡΠ΅, Π½Π΅ΠΊΠΎΡ Π²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ Π²Π΅ΡΠ΅ ΡΠΈ Π³ΠΎ ΡΠ΅ΡΠΈΠ» ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ ΡΡΡΠ΅ Π²ΠΎ 1980-ΡΠΈΡΠ΅;
gnu parallel
- ΠΎΠ²Π° Π΅ ΠΌΠ°Π³ΠΈΡΠ½Π° ΡΠ°Π±ΠΎΡΠ°, ΡΠ΅ΠΊΠΎΡ ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈ;- Π‘ΠΏΠ°ΡΠΊ ΡΠ°ΠΊΠ° Π½Π΅ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΈ Π½Π΅ ΡΠ°ΠΊΠ° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΠ°ΡΡΠΈΡΠΈΠΈ;
- ΠΡΠΊΡΠ° ΠΈΠΌΠ° ΠΏΡΠ΅ΠΌΠ½ΠΎΠ³Ρ Π½Π°Π΄Π·Π΅ΠΌΠ½ΠΈ ΡΡΠΎΡΠΎΡΠΈ ΠΏΡΠΈ ΡΠ΅ΡΠ°Π²Π°ΡΠ΅ Π½Π° Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ;
- ΠΡΠΎΡΠΈΡΠ°ΡΠΈΠ²Π½ΠΈΡΠ΅ Π½ΠΈΠ·ΠΈ Π½Π° AWK ΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ Π΅ΡΠΈΠΊΠ°ΡΠ½ΠΈ;
- ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ
stdin
ΠΈstdout
ΠΎΠ΄ ΡΠΊΡΠΈΠΏΡΠ° R, ΠΈ Π·Π°ΡΠΎΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΡΠ° Π²ΠΎ Π½Π°ΡΡΠΎΠ²ΠΎΠ΄ΠΎΡ; - ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅ΡΠ½Π°ΡΠ° ΠΏΠ°ΡΠ΅ΠΊΠ°, S3 ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈ ΠΌΠ½ΠΎΠ³Ρ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ;
- ΠΠ»Π°Π²Π½Π°ΡΠ° ΠΏΡΠΈΡΠΈΠ½Π° Π·Π° Π³ΡΠ±Π΅ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ Π΅ ΠΏΡΠ΅ΡΠ°Π½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π½Π° Π²Π°ΡΠΈΠΎΡ Π½Π°ΡΠΈΠ½ Π½Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅;
- Π½Π΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π°ΡΡΠ΅ ΡΠ΅ ΡΠ°ΡΠ½ΠΎ Π΄Π° Π³ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π·Π°Π΄Π°ΡΠΈΡΠ΅, ΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π³ΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΡ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠΎΠ°;
- API Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΡΠΎΡΡΡΠΌ ΡΠ°Π΄ΠΈ ΠΏΡΠΎΡΡΠΎΡΡ ΠΈ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ;
- ΠΠΊΠΎ Π²Π°ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠ΅ Π΄ΠΎΠ±ΡΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΈ, ΠΊΠ΅ΡΠΈΡΠ°ΡΠ΅ΡΠΎ ΡΠ΅ Π±ΠΈΠ΄Π΅ Π»Π΅ΡΠ½ΠΎ!
ΠΠ·Π²ΠΎΡ: www.habr.com