ΠŸΠ°Ρ€ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° 25 Π’Π‘ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ AWK ΠΈ R

ΠŸΠ°Ρ€ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° 25 Π’Π‘ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ AWK ΠΈ R
Како Π΄Π° ја ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚Π΅ ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°: Π‘Π΅ ΠΈΠ·Π²ΠΈΠ½ΡƒΠ²Π°ΠΌ ΡˆΡ‚ΠΎ тСкстот Π΅ Ρ‚ΠΎΠ»ΠΊΡƒ Π΄ΠΎΠ»Π³ ΠΈ Ρ…Π°ΠΎΡ‚ΠΈΡ‡Π΅Π½. Π—Π° Π΄Π° Π²ΠΈ Π·Π°ΡˆΡ‚Π΅Π΄ΠΈ Π²Ρ€Π΅ΠΌΠ΅, сСкоС поглавјС Π³ΠΎ Π·Π°ΠΏΠΎΡ‡Π½ΡƒΠ²Π°ΠΌ со Π²ΠΎΠ²Π΅Π΄ β€žΠ¨Ρ‚ΠΎ Π½Π°ΡƒΡ‡ΠΈΠ²β€œ, кој ја сумира ΡΡƒΡˆΡ‚ΠΈΠ½Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ³Π»Π°Π²Ρ˜Π΅Ρ‚ΠΎ Π²ΠΎ Π΅Π΄Π½Π° ΠΈΠ»ΠΈ Π΄Π²Π΅ Ρ€Π΅Ρ‡Π΅Π½ΠΈΡ†ΠΈ.

β€žΠ‘Π°ΠΌΠΎ ΠΏΠΎΠΊΠ°ΠΆΠΈ ΠΌΠΈ Π³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ!β€œ Ако само сакатС Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΎΠ΄ ΠΊΠ°Π΄Π΅ дојдов, Ρ‚ΠΎΠ³Π°Ρˆ прСскокнСтС Π³ΠΎ ΠΏΠΎΠ³Π»Π°Π²Ρ˜Π΅Ρ‚ΠΎ β€žΠ”Π° станСтС ΠΏΠΎΠΈΠ½Π²Π΅Π½Ρ‚ΠΈΠ²Π½ΠΈβ€œ, Π½ΠΎ мислам Π΄Π΅ΠΊΠ° Π΅ поинтСрСсно ΠΈ покорисно Π΄Π° сС Ρ‡ΠΈΡ‚Π° Π·Π° нСуспСхот.

НСодамна Π΄ΠΎΠ±ΠΈΠ² Π·Π°Π΄Π°Ρ‡Π° Π΄Π° поставам процСс Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π³ΠΎΠ»Π΅ΠΌ ΠΎΠ±Π΅ΠΌ Π½Π° сурови Π”ΠΠš сСквСнци (Ρ‚Π΅Ρ…Π½ΠΈΡ‡ΠΊΠΈ 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, ја користСв услугата АтСна, ΡˆΡ‚ΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° Π³ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ Π±Π°Ρ€Π°ΡšΠ°Ρ‚Π° Hive SQL Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π½Π° S3. НС Ρ‚Ρ€Π΅Π±Π° Π΄Π° поставуватС/ΠΏΠΎΠ΄ΠΈΠ³Π°Ρ‚Π΅ кластСр Hive, Π° исто Ρ‚Π°ΠΊΠ° ΠΏΠ»Π°ΡœΠ°Ρ‚Π΅ само Π·Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Π³ΠΈ Π±Π°Ρ€Π°Ρ‚Π΅.

ΠžΡ‚ΠΊΠ°ΠΊΠΎ ΠΈ Π³ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ°Π² Π½Π° Атина ΠΌΠΎΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΈΠ·Π²Ρ€ΡˆΠΈΠ² Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ тСстови со ΠΏΡ€Π°ΡˆΠ°ΡšΠ° ΠΊΠ°ΠΊΠΎ ΠΎΠ²Π°:

select * from intensityData limit 10;

И быстро ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Ρ…ΠΎΡ€ΠΎΡˆΠΎ структурированныС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. Π“ΠΎΡ‚ΠΎΠ²ΠΎ.

Π‘Π΅ Π΄ΠΎΠ΄Π΅ΠΊΠ° Π½Π΅ сС ΠΎΠ±ΠΈΠ΄ΠΎΠ²ΠΌΠ΅ Π΄Π° Π³ΠΈ искористимС ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π²ΠΎ Π½Π°ΡˆΠ°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° ...

Од ΠΌΠ΅Π½Π΅ бСшС ΠΏΠΎΠ±Π°Ρ€Π°Π½ΠΎ Π΄Π° Π³ΠΈ ΠΈΠ·Π²Π°Π΄Π°ΠΌ ситС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° SNP Π·Π° Π΄Π° Π³ΠΎ тСстирам ΠΌΠΎΠ΄Π΅Π»ΠΎΡ‚. Π“ΠΎ ΠΈΠ·Π²Ρ€ΡˆΠΈΠ² Π±Π°Ρ€Π°ΡšΠ΅Ρ‚ΠΎ:


select * from intensityData 
where snp = 'rs123456';

...ΠΈ ΠΏΠΎΡ‡Π½Π° Π΄Π° Ρ‡Π΅ΠΊΠ°. По осум ΠΌΠΈΠ½ΡƒΡ‚ΠΈ ΠΈ повСќС ΠΎΠ΄ 4 Π’Π‘ Π±Π°Ρ€Π°Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π³ΠΎ Π΄ΠΎΠ±ΠΈΠ² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚. Атина наплаќа спорСд ΠΎΠ±Π΅ΠΌΠΎΡ‚ Π½Π° ΠΏΡ€ΠΎΠ½Π°Ρ˜Π΄Π΅Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, 5 Π΄ΠΎΠ»Π°Ρ€ΠΈ ΠΏΠΎ Ρ‚Π΅Ρ€Π°Π±Π°Ρ˜Ρ‚. Π’Π°ΠΊΠ°, ΠΎΠ²Π° СдинствСно Π±Π°Ρ€Π°ΡšΠ΅ Ρ‡ΠΈΠ½Π΅ΡˆΠ΅ 20 Π΄ΠΎΠ»Π°Ρ€ΠΈ ΠΈ осум ΠΌΠΈΠ½ΡƒΡ‚ΠΈ Ρ‡Π΅ΠΊΠ°ΡšΠ΅. Π—Π° Π΄Π° Π³ΠΎ Π²ΠΊΠ»ΡƒΡ‡ΠΈΠΌΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΎΡ‚ Π½Π° ситС ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, ΠΌΠΎΡ€Π°Π²ΠΌΠ΅ Π΄Π° Ρ‡Π΅ΠΊΠ°ΠΌΠ΅ 38 Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΈ Π΄Π° ΠΏΠ»Π°Ρ‚ΠΈΠΌΠ΅ 50 ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ Π΄ΠΎΠ»Π°Ρ€ΠΈ.ΠžΡ‡ΠΈΠ³Π»Π΅Π΄Π½ΠΎ, ΠΎΠ²Π° Π½Π΅ Π½ΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°ΡˆΠ΅.

Π‘Π΅ΡˆΠ΅ Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ Π΄Π° сС користи ΠŸΠ°Ρ€ΠΊΠ΅Ρ‚...

Π¨Ρ‚ΠΎ Π½Π°ΡƒΡ‡ΠΈΠ²: Π‘ΠΈΠ΄Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΈ со Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ ΠŸΠ°Ρ€ΠΊΠ΅Ρ‚ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π½ΠΈΠ²Π½Π°Ρ‚Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°.

ΠŸΡ€Π²ΠΎ сС ΠΎΠ±ΠΈΠ΄ΠΎΠ² Π΄Π° ја ΠΏΠΎΠΏΡ€Π°Π²Π°ΠΌ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° со ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° ситС TSV Π²ΠΎ ΠŸΠ°Ρ€ΠΊΠ΅Ρ‚Π½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ. Π’ΠΈΠ΅ сС ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° со Π³ΠΎΠ»Π΅ΠΌΠΈ Π·Π±ΠΈΡ€ΠΊΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ бидСјќи ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈΡ‚Π΅ Π²ΠΎ Π½ΠΈΠ² сС складираат Π²ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½Π° Ρ„ΠΎΡ€ΠΌΠ°: сСкоја ΠΊΠΎΠ»ΠΎΠ½Π° Π»Π΅ΠΆΠΈ Π²ΠΎ сопствСната ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°/сСгмСнт Π½Π° дискот, Π·Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΠ΄ тСкстуалнитС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ, Π²ΠΎ ΠΊΠΎΠΈ Ρ€Π΅Π΄ΠΎΠ²ΠΈΡ‚Π΅ содрТат Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΠ΄ сСкоја ΠΊΠΎΠ»ΠΎΠ½Π°. И Π°ΠΊΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π½Π°Ρ˜Π΄Π΅Ρ‚Π΅ Π½Π΅ΡˆΡ‚ΠΎ, Ρ‚ΠΎΠ³Π°Ρˆ само ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ˜Ρ‚Π΅ ја ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π°Ρ‚Π° ΠΊΠΎΠ»ΠΎΠ½Π°. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ, сСкоја Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° складира опсСг Π½Π° врСдности Π²ΠΎ ΠΊΠΎΠ»ΠΎΠ½Π°, ΠΏΠ° Π°ΠΊΠΎ врСдноста ΡˆΡ‚ΠΎ ја Π±Π°Ρ€Π°Ρ‚Π΅ Π½Π΅ Π΅ Π²ΠΎ опсСгот Π½Π° ΠΊΠΎΠ»ΠΎΠ½Π°Ρ‚Π°, Spark Π½Π΅ΠΌΠ° Π΄Π° Π³ΡƒΠ±ΠΈ Π²Ρ€Π΅ΠΌΠ΅ ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅ Π½Π° Ρ†Π΅Π»Π°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°.

Π˜ΡΡ‚Ρ€Ρ‡Π°Π² Сдноставна Π·Π°Π΄Π°Ρ‡Π° AWS Π»Π΅ΠΏΠ°ΠΊ Π΄Π° Π³ΠΈ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Π½Π°ΡˆΠΈΡ‚Π΅ TSV Π²ΠΎ ΠΏΠ°Ρ€ΠΊΠ΅Ρ‚ ΠΈ Π΄Π° Π³ΠΈ исфрлимС Π½ΠΎΠ²ΠΈΡ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΎ Athena. Π‘Π΅Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ ΠΎΠΊΠΎΠ»Ρƒ 5 часа. Но, ΠΊΠΎΠ³Π° Π³ΠΎ ΠΈΠ·Π²Ρ€ΡˆΠΈΠ² Π±Π°Ρ€Π°ΡšΠ΅Ρ‚ΠΎ, ΠΌΠΈ Ρ‚Ρ€Π΅Π±Π°ΡˆΠ΅ исто Ρ‚ΠΎΠ»ΠΊΡƒ Π²Ρ€Π΅ΠΌΠ΅ ΠΈ ΠΌΠ°Π»ΠΊΡƒ ΠΏΠΎΠΌΠ°Π»ΠΊΡƒ ΠΏΠ°Ρ€ΠΈ Π·Π° Π΄Π° сС ΠΏΠΎΠΏΠΎΠ»Π½ΠΈ. Π€Π°ΠΊΡ‚ Π΅ Π΄Π΅ΠΊΠ° Spark, ΠΎΠ±ΠΈΠ΄ΡƒΠ²Π°Ρ˜ΡœΠΈ сС Π΄Π° ја ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π°, Сдноставно ΠΎΡ‚ΠΏΠ°ΠΊΡƒΠ²Π° Π΅Π΄Π½ΠΎ ΠΏΠ°Ρ€Ρ‡Π΅ TSV ΠΈ Π³ΠΎ стави Π²ΠΎ сопствСното ΠΏΠ°Ρ€Ρ‡Π΅ ΠŸΠ°Ρ€ΠΊΠ΅Ρ‚. И бидСјќи сСкоС ΠΏΠ°Ρ€Ρ‡Π΅ бСшС Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Π³ΠΎΠ»Π΅ΠΌΠΎ Π·Π° Π΄Π° Π³ΠΈ собСрС цСлоснитС записи Π½Π° ΠΌΠ½ΠΎΠ³Ρƒ Π»ΡƒΡ“Π΅, сСкоја Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π³ΠΈ ΡΠΎΠ΄Ρ€ΠΆΠ΅ΡˆΠ΅ ситС SNP, ΠΏΠ° Spark ΠΌΠΎΡ€Π°ΡˆΠ΅ Π΄Π° Π³ΠΈ ΠΎΡ‚Π²ΠΎΡ€ΠΈ ситС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π·Π° Π΄Π° Π³ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈΡ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ Π΅ ΡˆΡ‚ΠΎ стандардниот (ΠΈ ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡Π°Π½) Ρ‚ΠΈΠΏ Π½Π° ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ˜Π° Π½Π° Parquet, snappy, Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΠ΄Π΅Π»ΠΈ. Π—Π°Ρ‚ΠΎΠ°, сСкој ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅Π» бСшС Π·Π°Π³Π»Π°Π²Π΅Π½ Π²ΠΎ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π΄Π° ја распакува ΠΈ ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅ Ρ†Π΅Π»Π°Ρ‚Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ 3,5 GB.

ΠŸΠ°Ρ€ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° 25 Π’Π‘ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ AWK ΠΈ R

АјдС Π΄Π° Π³ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚

Π¨Ρ‚ΠΎ Π½Π°ΡƒΡ‡ΠΈΠ²: Π‘ΠΎΡ€Ρ‚ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π΅ Ρ‚Π΅ΡˆΠΊΠΎ, особСно Π°ΠΊΠΎ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ сС дистрибуираат.

МнС казалось, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ я понял ΡΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. МнС Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ лишь ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ SNP, Π° Π½Π΅ ΠΏΠΎ людям. Π’ΠΎΠ³Π΄Π° Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ‡Π°Π½ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ нСсколько SNP, ΠΈ Ρ‚ΠΎΠ³Π΄Π° сСбя Π²ΠΎ всСй красС проявит «умная» функция Parquet Β«ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ находится Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅Β». К соТалСнию, ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄Ρ‹ строк, раскиданных ΠΏΠΎ кластСру, оказалось слоТной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ.

AWS Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ‚ΠΈΠ²Π½ΠΎ Π½Π΅ сака Π΄Π° ΠΈΠ·Π΄Π°Π΄Π΅ ΠΏΠΎΠ²Ρ€Π°Ρ‚ Π½Π° ΠΏΠ°Ρ€ΠΈ ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° β€žΠˆΠ°Ρ сум расСан ΡΡ‚ΡƒΠ΄Π΅Π½Ρ‚β€œ. ΠžΡ‚ΠΊΠ°ΠΊΠΎ Ρ‚Ρ€Ρ‡Π°Π² со ΡΠΎΡ€Ρ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° Амазон Π»Π΅ΠΏΠ°ΠΊ, Ρ‚ΠΎΡ˜ Ρ€Π°Π±ΠΎΡ‚Π΅ΡˆΠ΅ 2 Π΄Π΅Π½Π° ΠΈ сС ΡƒΡ€Π½Π°.

Π¨Ρ‚ΠΎ Π΅ со ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ?

Π¨Ρ‚ΠΎ Π½Π°ΡƒΡ‡ΠΈΠ²: ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² Spark Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ сбалансированы.

ΠŸΠΎΡ‚ΠΎΠ° дојдов Π΄ΠΎ идСја Π·Π° ΠΏΠΎΠ΄Π΅Π»Π±Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π²ΠΎ Ρ…Ρ€ΠΎΠΌΠΎΠ·ΠΎΠΌΠΈΡ‚Π΅. Има 23 ΠΎΠ΄ Π½ΠΈΠ² (ΠΈ ΡƒΡˆΡ‚Π΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π°ΠΊΠΎ сС Π·Π΅ΠΌΠ°Ρ‚ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ ΠΌΠΈΡ‚ΠΎΡ…ΠΎΠ½Π΄Ρ€ΠΈΡ˜Π°Π»Π½Π°Ρ‚Π° Π”ΠΠš ΠΈ Π½Π΅ΠΌΠ°ΠΏΠΈΡ€Π°Π½ΠΈΡ‚Π΅ Ρ€Π΅Π³ΠΈΠΎΠ½ΠΈ).
Ова ќС Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π΄Π° Π³ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π½Π° ΠΏΠΎΠΌΠ°Π»ΠΈ ΠΏΠ°Ρ€Ρ‡ΠΈΡšΠ°. Ако Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ само Π΅Π΄Π½Π° линија Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° Π·Π° ΠΈΠ·Π²ΠΎΠ· Spark Π²ΠΎ скриптата Glue partition_by = "chr", Ρ‚ΠΎΠ³Π°Ρˆ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΠΏΠΎΠ΄Π΅Π»Π°Ρ‚ Π½Π° ΠΊΠΎΡ„ΠΈ.

ΠŸΠ°Ρ€ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° 25 Π’Π‘ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ AWK ΠΈ R
Π“Π΅Π½ΠΎΠΌΠΎΡ‚ сС состои ΠΎΠ΄ Π±Ρ€ΠΎΡ˜Π½ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈ Π½Π°Ρ€Π΅Ρ‡Π΅Π½ΠΈ Ρ…Ρ€ΠΎΠΌΠΎΠ·ΠΎΠΌΠΈ.

Π—Π° ΠΆΠ°Π», Ρ‚ΠΎΠ° Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°ΡˆΠ΅. Π₯Ρ€ΠΎΠΌΠΎΠ·ΠΎΠΌΠΈΡ‚Π΅ ΠΈΠΌΠ°Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½ΠΈ, ΡˆΡ‚ΠΎ Π·Π½Π°Ρ‡ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠ»ΠΈΡ‡ΠΈΠ½ΠΈ Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Ова Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ 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')
  )

...сСпак, Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° сè ΡƒΡˆΡ‚Π΅ Π½Π΅ бСшС Π·Π°Π²Ρ€ΡˆΠ΅Π½Π°. Π“ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π² Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ: ја Π·Π³ΠΎΠ»Π΅ΠΌΠΈΠ² распрСдСлбата Π½Π° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° Π·Π° сСкој ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅Π» Π½Π° Π±Π°Ρ€Π°ΡšΠ΅, користСв јазли со Π³ΠΎΠ»Π΅ΠΌΠ° ΠΊΠΎΠ»ΠΈΡ‡ΠΈΠ½Π° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°, користСв ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π·Π° Π΅ΠΌΠΈΡ‚ΡƒΠ²Π°ΡšΠ΅ (ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π·Π° Π΅ΠΌΠΈΡ‚ΡƒΠ²Π°ΡšΠ΅), Π½ΠΎ сСкој ΠΏΠ°Ρ‚ ΠΊΠΎΠ³Π° Ρ‚ΠΈΠ΅ сС ΠΏΠΎΠΊΠ°ΠΆΠ°Π° ΠΊΠ°ΠΊΠΎ ΠΏΠΎΠ»ΡƒΠΌΠ΅Ρ€ΠΊΠΈ ΠΈ постСпСно ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ ΠΏΠΎΡ‡Π½ΡƒΠ²Π°Π° Π΄Π° ΠΏΡ€ΠΎΠΏΠ°Π΄Π½Π΅ Π΄ΠΎΠ΄Π΅ΠΊΠ° сè Π½Π΅ прСстанС.

Π‘Ρ‚Π°Π½ΡƒΠ²Π°ΠΌ ΠΏΠΎΠΊΡ€Π΅Π°Ρ‚ΠΈΠ²Π΅Π½

Π¨Ρ‚ΠΎ Π½Π°ΡƒΡ‡ΠΈΠ²: ПонСкогаш ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π±Π°Ρ€Π°Π°Ρ‚ посСбни Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ˜Π°.

БСкој SNP ΠΈΠΌΠ° врСдност Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡ˜Π°Ρ‚Π°. Ова Π΅ Π±Ρ€ΠΎΡ˜ кој ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π° Π½Π° Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° Π±Π°Π·ΠΈ Π΄ΠΎΠ»ΠΆ Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ‚ Ρ…Ρ€ΠΎΠΌΠΎΠ·ΠΎΠΌ. Ова Π΅ ΡƒΠ±Π°Π² ΠΈ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Π³ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. ΠžΡ‚ΠΏΡ€Π²ΠΈΠ½ сакав Π΄Π° ΠΏΠΎΠ΄Π΅Π»Π°ΠΌ ΠΏΠΎ Ρ€Π΅Π³ΠΈΠΎΠ½ΠΈ Π½Π° сСкој Ρ…Ρ€ΠΎΠΌΠΎΠ·ΠΎΠΌ. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ 1 - 2000, 2001 - 4000, ΠΈΡ‚Π½. Но, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚ Π΅ ΡˆΡ‚ΠΎ SNP-ΠΈΡ‚Π΅ Π½Π΅ сС Ρ€Π°ΠΌΠ½ΠΎΠΌΠ΅Ρ€Π½ΠΎ распорСдСни Π½ΠΈΠ· Ρ…Ρ€ΠΎΠΌΠΎΠ·ΠΎΠΌΠΈΡ‚Π΅, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° ќС сС Ρ€Π°Π·Π»ΠΈΠΊΡƒΠ²Π° ΠΌΠ½ΠΎΠ³Ρƒ.

ΠŸΠ°Ρ€ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° 25 Π’Π‘ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ AWK ΠΈ R

Како Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ°, дојдов Π΄ΠΎ Ρ€Π°ΡΡ‡Π»Π΅Π½ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈΡ‚Π΅ Π²ΠΎ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ (Ρ€Π°Π½Π³). ΠšΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΈ вСќС ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, ΠΏΠΎΠ±Π°Ρ€Π°Π² Π΄Π° добијам листа Π½Π° СдинствСни 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 ΠΊΠ°ΠΊΠΎ Π΄Π° сС ΠΏΠΎΠ΄Π΅Π»Π°Ρ‚ ΠΏΠΎ врСдности Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΠΈ најдов Ρ‚ΠΎΠ»ΠΊΡƒ ΠΎΠ΄Π»ΠΈΡ‡Π΅Π½ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€. Π‘ΠΎ AWK ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ тСкстуална Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎ врСдности Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈ со Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ ќС ја Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π²ΠΎ скрипта намСсто Π΄Π° Π³ΠΈ ΠΈΡΠΏΡ€Π°ΡœΠ°Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ Π΄ΠΎ 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 ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°. Π—Π° Π΄Π° Π³ΠΎ Ρ€Π΅ΡˆΠΈΠΌΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚ ΠΈ Π΄Π° Π½Π΅ ΠΈΠ·Π³ΡƒΠ±ΠΈΠΌΠ΅ ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠ°Ρ€ΠΈ, ΠΌΠΎΡ€Π°Π²ΠΌΠ΅ Π΄Π° сфатимС ΠΊΠ°ΠΊΠΎ Π΄Π° ја ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°. Π—Π° ΡΡ€Π΅ΡœΠ°, Π²ΠΎ апсолутно Π½Π΅Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½Π° ΠΊΠ½ΠΈΠ³Π° Data Science at the Command Line Најдов поглавјС ΠΎΠ΄ ЏСрон ЈансСнс Π·Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°. Од Π½Π΅Π³ΠΎ Π΄ΠΎΠ·Π½Π°Π² gnu parallel, ΠΌΠ½ΠΎΠ³Ρƒ флСксибилСн ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° повСќСнишки Π²ΠΎ Unix.

ΠŸΠ°Ρ€ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° 25 Π’Π‘ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ AWK ΠΈ R
Кога ја Π·Π°ΠΏΠΎΡ‡Π½Π°Π² ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡ˜Π°Ρ‚Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ Π½ΠΎΠ²ΠΈΠΎΡ‚ процСс, сè бСшС Π²ΠΎ Ρ€Π΅Π΄, Π½ΠΎ сè ΡƒΡˆΡ‚Π΅ имашС тСсно Π³Ρ€Π»ΠΎ - ΠΏΡ€Π΅Π·Π΅ΠΌΠ°ΡšΠ΅Ρ‚ΠΎ S3 ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈ Π½Π° дискот Π½Π΅ бСшС ΠΌΠ½ΠΎΠ³Ρƒ Π±Ρ€Π·ΠΎ ΠΈ Π½Π΅ бСшС цСлосно ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ. Π—Π° Π΄Π° Π³ΠΎ ΠΏΠΎΠΏΡ€Π°Π²Π°ΠΌ ΠΎΠ²Π°, Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠ² ΠΎΠ²Π°:

  1. Π”ΠΎΠ·Π½Π°Π² Π΄Π΅ΠΊΠ° Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° сС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° Ρ„Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΡ€Π΅Π·Π΅ΠΌΠ°ΡšΠ΅ S3 Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΎ Ρ†Π΅Π²ΠΊΠΎΠ²ΠΎΠ΄ΠΎΡ‚, цСлосно Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π°Ρ˜ΡœΠΈ Π³ΠΎ срСдното ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° дискот. Ова Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° ΠΌΠΎΠΆΠ°ΠΌ Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π°ΠΌ ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° дискот ΠΈ Π΄Π° користам ΡƒΡˆΡ‚Π΅ ΠΏΠΎΠΌΠ°Π», Π° со Ρ‚ΠΎΠ° ΠΈ ΠΏΠΎΠ΅Π²Ρ‚ΠΈΠ½ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° AWS.
  2. Π’ΠΈΠΌ aws configure set default.s3.max_concurrent_requests 50 Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π³ΠΎ Π·Π³ΠΎΠ»Π΅ΠΌΠΈ Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° нишки ΡˆΡ‚ΠΎ Π³ΠΈ користи AWS CLI (стандардно ΠΈΠΌΠ° 10).
  3. Π‘Π΅ ΠΏΡ€Π΅Ρ„Ρ€Π»ΠΈΠ² Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ EC2 ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½ Π·Π° Π±Ρ€Π·ΠΈΠ½Π° Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°, со Π±ΡƒΠΊΠ²Π°Ρ‚Π° n Π²ΠΎ ΠΈΠΌΠ΅Ρ‚ΠΎ. ΠžΡ‚ΠΊΡ€ΠΈΠ² Π΄Π΅ΠΊΠ° Π³ΡƒΠ±Π΅ΡšΠ΅Ρ‚ΠΎ Π½Π° процСсорската моќ ΠΏΡ€ΠΈ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° n-инстанци Π΅ повСќС ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠ΅Π½Π·ΠΈΡ€Π°Π½ΠΎ со Π·Π³ΠΎΠ»Π΅ΠΌΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π±Ρ€Π·ΠΈΠ½Π°Ρ‚Π° Π½Π° Π²Ρ‡ΠΈΡ‚ΡƒΠ²Π°ΡšΠ΅. Π—Π° ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ користСв c5n.4xl.
  4. Π‘ΠΌΠ΅Π½Π΅Ρ‚ΠΎ gzip Π½Π° pigz, ΠΎΠ²Π° Π΅ Π°Π»Π°Ρ‚ΠΊΠ° Π·Π° gzip која ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π°Π²ΠΈ ΠΎΠ΄Π»ΠΈΡ‡Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π·Π° Π΄Π° ја ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΠΈΡ€Π° ΠΏΡ€Π²ΠΈΡ‡Π½ΠΎ Π½Π΅ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΠΈΡ€Π°Π½Π°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π° Π·Π° Π΄Π΅ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ˜Π° Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ (ΠΎΠ²Π° Π½Π°Ρ˜ΠΌΠ°Π»ΠΊΡƒ ΠΏΠΎΠΌΠΎΠ³Π½Π°).

# 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 Ρ‚Π΅Ρ€Π°Π±Π°Ρ˜Ρ‚ΠΈ Π·Π° само Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ часа.

Овој Ρ‚Π²ΠΈΡ‚ Ρ‚Ρ€Π΅Π±Π°ΡˆΠ΅ Π΄Π° Π³ΠΎ спомСнС β€žTSVβ€œ. Π—Π° ΠΆΠ°Π».

ΠšΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Π½ΠΎΠ²ΠΎΠΏΠ°Ρ€ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ

Π¨Ρ‚ΠΎ Π½Π°ΡƒΡ‡ΠΈΠ²: Spark сака нСкомпрСсирани ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ Π½Π΅ сака ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ.

Π‘Π΅Π³Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π±Π΅Π° Π²ΠΎ S3 Π²ΠΎ Π½Π΅ΠΎΡ‚ΠΏΠ°ΠΊΡƒΠ²Π°Π½ (Ρ‡ΠΈΡ‚Π°Ρ˜: сподСлСн) ΠΈ ΠΏΠΎΠ»ΡƒΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈ ΠΌΠΎΠΆΠ΅Π² ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π΄Π° сС Π²Ρ€Π°Ρ‚Π°ΠΌ Π²ΠΎ Spark. МС Ρ‡Π΅ΠΊΠ°ΡˆΠ΅ ΠΈΠ·Π½Π΅Π½Π°Π΄ΡƒΠ²Π°ΡšΠ΅: ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π½Π΅ успСав Π΄Π° Π³ΠΎ постигнам Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ Π³ΠΎ сакав! Π‘Π΅ΡˆΠ΅ ΠΌΠ½ΠΎΠ³Ρƒ Ρ‚Π΅ΡˆΠΊΠΎ Π΄Π° сС ΠΊΠ°ΠΆΠ΅ Π½Π° Spark ΠΊΠ°ΠΊΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ сС ΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅. И Π΄ΡƒΡ€ΠΈ ΠΈ ΠΊΠΎΠ³Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠ² ΠΎΠ²Π°, сС ΠΏΠΎΠΊΠ°ΠΆΠ° Π΄Π΅ΠΊΠ° ΠΈΠΌΠ° ΠΏΡ€Π΅ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ (95 илјади), ΠΈ ΠΊΠΎΠ³Π° користСв coalesce Π³ΠΎ Π½Π°ΠΌΠ°Π»ΠΈ Π½ΠΈΠ²Π½ΠΈΠΎΡ‚ Π±Ρ€ΠΎΡ˜ Π½Π° Ρ€Π°Π·ΡƒΠΌΠ½ΠΈ Π³Ρ€Π°Π½ΠΈΡ†ΠΈ, ΠΎΠ²Π° ја ΡƒΠ½ΠΈΡˆΡ‚ΠΈ ΠΌΠΎΡ˜Π°Ρ‚Π° ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡ˜Π°. Π‘ΠΈΠ³ΡƒΡ€Π΅Π½ сум Π΄Π΅ΠΊΠ° ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΠΏΡ€Π°Π²ΠΈ, Π½ΠΎ ΠΏΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π΄Π΅Π½Π° ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Π² Π΄Π° најдам Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. На ΠΊΡ€Π°Ρ˜ΠΎΡ‚ Π³ΠΈ Π·Π°Π²Ρ€ΡˆΠΈΠ² ситС Π·Π°Π΄Π°Ρ‡ΠΈ Π²ΠΎ Spark, ΠΈΠ°ΠΊΠΎ ΠΌΠΈ Ρ‚Ρ€Π΅Π±Π°ΡˆΠ΅ Π½Π΅ΠΊΠΎΠ΅ Π²Ρ€Π΅ΠΌΠ΅ ΠΈ ΠΌΠΎΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π½Π° Parquet Π½Π΅ Π±Π΅Π° ΠΌΠ½ΠΎΠ³Ρƒ ΠΌΠ°Π»ΠΈ (~200 KB). Π‘Π΅ΠΏΠ°ΠΊ, ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π±Π΅Π° Ρ‚Π°ΠΌΡƒ ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ Π±Π΅Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ.

ΠŸΠ°Ρ€ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° 25 Π’Π‘ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ AWK ΠΈ R
ΠŸΡ€Π΅ΠΌΠ°Π»ΠΊΡƒ ΠΈ Π½Π΅Ρ€Π°ΠΌΠ½ΠΎΠΌΠ΅Ρ€Π½ΠΎ, прСкрасно!

Π’Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΏΡ€Π°ΡˆΠ°ΡšΠ° Π½Π° 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 ΠΎΠ΄ Брус Π‘Π°Ρ€Π½Π΅Ρ‚ ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² Π·Π° ΠΊΡƒΠ» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° Π½Π°Ρ€Π΅Ρ‡Π΅Π½Π° β€žΠ°ΡΠΎΡ†ΠΈΡ˜Π°Ρ‚ΠΈΠ²Π½ΠΈ Π½ΠΈΠ·ΠΈ" Π’ΠΎ ΡΡƒΡˆΡ‚ΠΈΠ½Π°, ΠΎΠ²Π° сС ΠΏΠ°Ρ€ΠΎΠ²ΠΈ со ΠΊΠ»ΡƒΡ‡Π½Π° врСдност, ΠΊΠΎΠΈ ΠΏΠΎΡ€Π°Π΄ΠΈ нСкоја ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° сС Π½Π°Ρ€Π΅ΠΊΡƒΠ²Π°Π° ΠΏΠΎΠΈΠ½Π°ΠΊΡƒ Π²ΠΎ AWK, ΠΈ Π·Π°Ρ‚ΠΎΠ° Π½Π΅ΠΊΠ°ΠΊΠΎ Π½Π΅ размислував ΠΌΠ½ΠΎΠ³Ρƒ Π·Π° Π½ΠΈΠ². Π ΠΎΠΌΠ°Π½ Π§Π΅ΠΏΡ™Π°ΠΊΠ° потсСти Π΄Π΅ΠΊΠ° Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΡ‚ β€žΠ°ΡΠΎΡ†ΠΈΡ˜Π°Ρ‚ΠΈΠ²Π½ΠΈ Π½ΠΈΠ·ΠΈβ€œ Π΅ ΠΌΠ½ΠΎΠ³Ρƒ постар ΠΎΠ΄ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΡ‚ β€žΠΏΠ°Ρ€ ΠΊΠ»ΡƒΡ‡-Π²Ρ€Π΅Π΄Π½ΠΎΡΡ‚β€œ. Π”ΡƒΡ€ΠΈ ΠΈ Π°ΠΊΠΎ Π²ΠΈΠ΅ ΠΏΠΎΠ±Π°Ρ€Π°Ρ˜Ρ‚Π΅ ја врСдноста Π½Π° ΠΊΠ»ΡƒΡ‡ΠΎΡ‚ Π²ΠΎ Google Ngram, Π½Π΅ΠΌΠ° Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡ‚Π΅ овој Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Ρ‚Π°ΠΌΡƒ, Π½ΠΎ ќС Π½Π°Ρ˜Π΄Π΅Ρ‚Π΅ Π°ΡΠΎΡ†ΠΈΡ˜Π°Ρ‚ΠΈΠ²Π½ΠΈ Π½ΠΈΠ·ΠΈ! ΠŸΠΎΠΊΡ€Π°Ρ˜ Ρ‚ΠΎΠ°, β€žΠΏΠ°Ρ€ΠΎΡ‚ ΠΊΠ»ΡƒΡ‡-Π²Ρ€Π΅Π΄Π½ΠΎΡΡ‚β€œ Π½Π°Ρ˜Ρ‡Π΅ΡΡ‚ΠΎ сС ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π° со Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠΎΠ»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π΄Π° сС спорСдува со Ρ…Π°ΡˆΠΌΠ°ΠΏΠ°. Π‘Ρ„Π°Ρ‚ΠΈΠ² Π΄Π΅ΠΊΠ° ΠΌΠΎΠΆΠ°ΠΌ Π΄Π° Π³ΠΈ користам ΠΎΠ²ΠΈΠ΅ Π°ΡΠΎΡ†ΠΈΡ˜Π°Ρ‚ΠΈΠ²Π½ΠΈ Π½ΠΈΠ·ΠΈ Π·Π° Π΄Π° Π³ΠΈ ΠΏΠΎΠ²Ρ€Π·Π°ΠΌ ΠΌΠΎΠΈΡ‚Π΅ SNP со Ρ‚Π°Π±Π΅Π»Π° Π·Π° ΠΎΡ‚ΠΏΠ°Π΄ΠΎΡ†ΠΈ ΠΈ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π±Π΅Π· ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° Spark.

Π—Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π°, Π²ΠΎ скриптата 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?

ΠŸΠ°Ρ€ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° 25 Π’Π‘ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ AWK ΠΈ R
ΠŸΠ°ΠΏΠΊΠΈΡ‚Π΅ Π²ΠΎ 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. Направив ΠΈ Π²Π΅Π±-страница Π·Π° ΠΌΠΎΠΈΡ‚Π΅ ΠΊΠΎΠ»Π΅Π³ΠΈ pkgdown, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ°Ρ‚ лСсно Π΄Π° Π²ΠΈΠ΄Π°Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°.

ΠŸΠ°Ρ€ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° 25 Π’Π‘ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ AWK ΠΈ R

ΠŸΠ°ΠΌΠ΅Ρ‚Π½ΠΎ ΠΊΠ΅ΡˆΠΈΡ€Π°ΡšΠ΅

Π¨Ρ‚ΠΎ Π½Π°ΡƒΡ‡ΠΈΠ²: Ако Π²Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ сС Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ΠΈ, ΠΊΠ΅ΡˆΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ ќС Π±ΠΈΠ΄Π΅ лСсно!

Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ Π΅Π΄Π΅Π½ ΠΎΠ΄ Π³Π»Π°Π²Π½ΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ Ρ‚Π΅ΠΊΠΎΠ²ΠΈ Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈ истиот ΠΌΠΎΠ΄Π΅Π» Π½Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ 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 Π’Π‘ истоврСмСно;
  • Π‘ΠΈΠ΄Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΈ со Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ ΠŸΠ°Ρ€ΠΊΠ΅Ρ‚ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π½ΠΈΠ²Π½Π°Ρ‚Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°;
  • ΠŸΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈΡ‚Π΅ Π²ΠΎ Spark ΠΌΠΎΡ€Π° Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ избалансирани;
  • Π’ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, никогаш Π½Π΅ ΠΎΠ±ΠΈΠ΄ΡƒΠ²Π°Ρ˜Ρ‚Π΅ сС Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ 2,5 ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ;
  • Π‘ΠΎΡ€Ρ‚ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π΅ сè ΡƒΡˆΡ‚Π΅ Ρ‚Π΅ΡˆΠΊΠΎ, ΠΊΠ°ΠΊΠΎ ΠΈ ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Spark;
  • понСкогаш ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π±Π°Ρ€Π°Π°Ρ‚ посСбни Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ˜Π°;
  • объСдинСниС Π² Spark Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстро, Π½ΠΎ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всё Π΅Ρ‰Ρ‘ обходится Π΄ΠΎΡ€ΠΎΠ³ΠΎ;
  • Π½Π΅ спиј ΠΊΠΎΠ³Π° Ρ‚Π΅ ΡƒΡ‡Π°Ρ‚ Π½Π° основитС, нСкој Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎ вСќС Ρ‚ΠΈ Π³ΠΎ Ρ€Π΅ΡˆΠΈΠ» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚ ΡƒΡˆΡ‚Π΅ Π²ΠΎ 1980-Ρ‚ΠΈΡ‚Π΅;
  • gnu parallel - ΠΎΠ²Π° Π΅ ΠΌΠ°Π³ΠΈΡ‡Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°, сСкој Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ користи;
  • Π‘ΠΏΠ°Ρ€ΠΊ сака нСкомпрСсирани ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ Π½Π΅ сака ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ;
  • Π˜ΡΠΊΡ€Π° ΠΈΠΌΠ° ΠΏΡ€Π΅ΠΌΠ½ΠΎΠ³Ρƒ Π½Π°Π΄Π·Π΅ΠΌΠ½ΠΈ Ρ‚Ρ€ΠΎΡˆΠΎΡ†ΠΈ ΠΏΡ€ΠΈ Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ΅ Π½Π° Сдноставни ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ;
  • ΠΡΠΎΡ†ΠΈΡ˜Π°Ρ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ Π½ΠΈΠ·ΠΈ Π½Π° AWK сС ΠΌΠ½ΠΎΠ³Ρƒ Сфикасни;
  • ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ stdin ΠΈ stdout ΠΎΠ΄ скрипта R, ΠΈ Π·Π°Ρ‚ΠΎΠ° користСтС ја Π²ΠΎ Π½Π°Ρ„Ρ‚ΠΎΠ²ΠΎΠ΄ΠΎΡ‚;
  • Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Π½Π°Ρ‚Π° ΠΏΠ°Ρ‚Π΅ΠΊΠ°, S3 ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΌΠ½ΠΎΠ³Ρƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ;
  • Π“Π»Π°Π²Π½Π°Ρ‚Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π·Π° Π³ΡƒΠ±Π΅ΡšΠ΅ Π²Ρ€Π΅ΠΌΠ΅ Π΅ ΠΏΡ€Π΅Ρ€Π°Π½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π²Π°ΡˆΠΈΠΎΡ‚ Π½Π°Ρ‡ΠΈΠ½ Π½Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅;
  • Π½Π΅ ΠΎΠ±ΠΈΠ΄ΡƒΠ²Π°Ρ˜Ρ‚Π΅ сС Ρ€Π°Ρ‡Π½ΠΎ Π΄Π° Π³ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅, оставСтС Π³ΠΎ ΠΊΠΎΠΌΠΏΡ˜ΡƒΡ‚Π΅Ρ€ΠΎΡ‚ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈ Ρ‚ΠΎΠ°;
  • API Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ простым Ρ€Π°Π΄ΠΈ простоты ΠΈ гибкости использования;
  • Ако Π²Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ сС Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ΠΈ, ΠΊΠ΅ΡˆΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ ќС Π±ΠΈΠ΄Π΅ лСсно!

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€