AWK рдЖрдгрд┐ R рд╡рд╛рдкрд░реВрди 25TB рдкрд╛рд░реНрд╕рд┐рдВрдЧ

AWK рдЖрдгрд┐ R рд╡рд╛рдкрд░реВрди 25TB рдкрд╛рд░реНрд╕рд┐рдВрдЧ
рд╣рд╛ рд▓реЗрдЦ рдХрд╕рд╛ рд╡рд╛рдЪрд╛рдпрдЪрд╛: рдордЬрдХреВрд░ рдЗрддрдХрд╛ рд▓рд╛рдВрдм рдЖрдгрд┐ рдЧреЛрдВрдзрд│рд▓реЗрд▓рд╛ рдЕрд╕рд▓реНрдпрд╛рдмрджреНрджрд▓ рдореА рджрд┐рд▓рдЧреАрд░ рдЖрд╣реЛрдд. рддреБрдордЪрд╛ рд╡реЗрд│ рд╡рд╛рдЪрд╡рдгреНрдпрд╛рд╕рд╛рдареА, рдореА рдкреНрд░рддреНрдпреЗрдХ рдЕрдзреНрдпрд╛рдпрд╛рдЪреА рд╕реБрд░реБрд╡рд╛рдд тАЬрдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛтАЭ рдкреНрд░рд╕реНрддрд╛рд╡рдиреЗрдиреЗ рдХрд░рддреЛ, рдЬреЗ рдПрдХ рдХрд┐рдВрд╡рд╛ рджреЛрди рд╡рд╛рдХреНрдпрд╛рдВрдордзреНрдпреЗ рдЕрдзреНрдпрд╛рдпрд╛рдЪреЗ рд╕рд╛рд░ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рддреЗ.

"рдлрдХреНрдд рдорд▓рд╛ рдЙрдкрд╛рдп рджрд╛рдЦрд╡рд╛!" рдореА рдХреЛрдареВрди рдЖрд▓реЛ рд╣реЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдкрд╣рд╛рдпрдЪреЗ рдЕрд╕реЗрд▓, рддрд░ тАЬрдЕрдзрд┐рдХ рдХрд▓реНрдкрдХ рдмрдирдгреЗтАЭ рдпрд╛ рдзрдбреНрдпрд╛рдХрдбреЗ рдЬрд╛, рдкрд░рдВрддреБ рдорд▓рд╛ рд╡рд╛рдЯрддреЗ рдХреА рдЕрдкрдпрд╢рд╛рдмрджреНрджрд▓ рд╡рд╛рдЪрдгреЗ рдЕрдзрд┐рдХ рдордиреЛрд░рдВрдЬрдХ рдЖрдгрд┐ рдЙрдкрдпреБрдХреНрдд рдЖрд╣реЗ.

рдорд▓рд╛ рдЕрд▓реАрдХрдбреЗрдЪ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдХрдЪреНрдЪреНрдпрд╛ DNA рдЕрдиреБрдХреНрд░рдорд╛рдВрд╡рд░ (рддрд╛рдВрддреНрд░рд┐рдХрджреГрд╖реНрдЯреНрдпрд╛ рдПрдХ SNP рдЪрд┐рдк) рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреЗ рдХрд╛рдо рджреЗрдгреНрдпрд╛рдд рдЖрд▓реЗ рд╣реЛрддреЗ. рддреНрдпрд╛рдирдВрддрд░рдЪреНрдпрд╛ рдореЙрдбреЗрд▓рд┐рдВрдЧ рдЖрдгрд┐ рдЗрддрд░ рдХрд╛рдорд╛рдВрд╕рд╛рдареА рджрд┐рд▓реЗрд▓реНрдпрд╛ рдЕрдиреБрд╡рд╛рдВрд╢рд┐рдХ рд╕реНрдерд╛рдирд╛рдмрджреНрджрд▓ (рдЬреНрдпрд╛рд▓рд╛ SNP рдореНрд╣рдгрддрд╛рдд) рддреНрд╡рд░реАрдд рдбреЗрдЯрд╛ рдорд┐рд│рд╡рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рд╣реЛрддреА. R рдЖрдгрд┐ AWK рд╡рд╛рдкрд░реВрди, рдореА рдХреНрд╡реЗрд░реА рдкреНрд░рдХреНрд░рд┐рдпреЗрд▓рд╛ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдЧрддреА рджреЗрдКрди, рдиреИрд╕рд░реНрдЧрд┐рдХ рдкрджреНрдзрддреАрдиреЗ рдбреЗрдЯрд╛ рд╕рд╛рдл рдЖрдгрд┐ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдгреНрдпрд╛рдд рд╕рдХреНрд╖рдо рд╣реЛрддреЛ. рд╣реЗ рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рд╕реЛрдкреЗ рдирд╡реНрд╣рддреЗ рдЖрдгрд┐ рддреНрдпрд╛рд╕рд╛рдареА рдЕрдиреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддреНрдпрд╛. рд╣рд╛ рд▓реЗрдЦ рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рдЭреНрдпрд╛ рдХрд╛рд╣реА рдЪреБрдХрд╛ рдЯрд╛рд│рдгреНрдпрд╛рдд рдорджрдд рдХрд░реЗрд▓ рдЖрдгрд┐ рдореА рдХрд╛рдп рдХреЗрд▓реЗ рддреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рджрд╛рдЦрд╡реЗрд▓.

рдкреНрд░рдердо, рдХрд╛рд╣реА рдкреНрд░рд╛рд╕реНрддрд╛рд╡рд┐рдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг.

рдбреЗрдЯрд╛

рдЖрдордЪреНрдпрд╛ рд╡рд┐рджреНрдпрд╛рдкреАрдард╛рдЪреНрдпрд╛ рдЕрдиреБрд╡рд╛рдВрд╢рд┐рдХ рдорд╛рд╣рд┐рддреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрдВрджреНрд░рд╛рдиреЗ рдЖрдореНрд╣рд╛рд▓рд╛ 25 TB TSV рд╕реНрд╡рд░реВрдкрд╛рдд рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХреЗрд▓рд╛ рдЖрд╣реЗ. рдорд▓рд╛ рддреЗ 5 Gzip-рд╕рдВрдХреБрдЪрд┐рдд рдкреЕрдХреЗрдЬреЗрд╕рдордзреНрдпреЗ рд╡рд┐рднрд╛рдЧрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд, рдкреНрд░рддреНрдпреЗрдХрд╛рдордзреНрдпреЗ рд╕реБрдорд╛рд░реЗ 240 рдЪрд╛рд░-рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдлрд╛рдпрд▓реА рдЖрд╣реЗрдд. рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддреАрдордзреНрдпреЗ рдПрдХрд╛ рд╡реНрдпрдХреНрддреАрдХрдбреВрди рдПрдХрд╛ SNP рд╕рд╛рдареА рдбреЗрдЯрд╛ рдЕрд╕рддреЛ. рдПрдХреВрдг, ~ 2,5 рджрд╢рд▓рдХреНрд╖ SNP рдЖрдгрд┐ ~ 60 рд╣рдЬрд╛рд░ рд▓реЛрдХрд╛рдВрд╡рд░реАрд▓ рдбреЗрдЯрд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛. SNP рдорд╛рд╣рд┐рддреА рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдлрд╛рдпрд▓реАрдВрдордзреНрдпреЗ рдЕрд╕рдВрдЦреНрдп рд╕реНрддрдВрдн рдЖрд╣реЗрдд рдЬреНрдпрд╛рдордзреНрдпреЗ рд╡рд┐рд╡рд┐рдз рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рд╣реЛрддрд╛рдд, рдЬрд╕реЗ рдХреА рд╡рд╛рдЪрдгреНрдпрд╛рдЪреА рддреАрд╡реНрд░рддрд╛, рднрд┐рдиреНрди рдПрд▓реАрд▓рдЪреА рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ рдЗ. рдПрдХреВрдг, рдЕрджреНрд╡рд┐рддреАрдп рдореВрд▓реНрдпрд╛рдВрд╕рд╣ рд╕реБрдорд╛рд░реЗ 30 рд╕реНрддрдВрдн рд╣реЛрддреЗ.

рдЧреЛрд▓

рдХреЛрдгрддреНрдпрд╛рд╣реА рдбреЗрдЯрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдкреНрд░рдХрд▓реНрдкрд╛рдкреНрд░рдорд╛рдгреЗ, рдбреЗрдЯрд╛ рдХрд╕рд╛ рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдИрд▓ рд╣реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдгреЗ рд╣реА рд╕рд░реНрд╡рд╛рдд рдорд╣рддреНрддреНрд╡рд╛рдЪреА рдЧреЛрд╖реНрдЯ рд╣реЛрддреА. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд рдЖрдореНрд╣реА SNP рд╡рд░ рдЖрдзрд╛рд░рд┐рдд SNP рд╕рд╛рдареА рдореЙрдбреЗрд▓реНрд╕ рдЖрдгрд┐ рд╡рд░реНрдХрдлреНрд▓реЛ рдореБрдЦреНрдпрддрдГ рдирд┐рд╡рдбреВ. рдореНрд╣рдгрдЬреЗрдЪ, рдЖрдореНрд╣рд╛рд▓рд╛ рдПрдХрд╛ рд╡реЗрд│реА рдлрдХреНрдд рдПрдХрд╛ SNP рд╡рд░ рдбреЗрдЯрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓. рдорд▓рд╛ 2,5 рджрд╢рд▓рдХреНрд╖ SNP рдкреИрдХреА рдПрдХрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рд╕рд░реНрд╡ рд░реЗрдХреЙрд░реНрдб рд╢рдХреНрдп рддрд┐рддрдХреНрдпрд╛ рд╕рд╣рдЬ, рдЬрд▓рдж рдЖрдгрд┐ рд╕реНрд╡рд╕реНрддрд╛рдд рдХрд╕реЗ рдорд┐рд│рд╡рд╛рдпрдЪреЗ рд╣реЗ рд╢рд┐рдХрд╛рдпрдЪреЗ рд╣реЛрддреЗ.

рд╣реЗ рдХрд╕реЗ рдХрд░реВ рдирдпреЗ

рдПрдХ рдпреЛрдЧреНрдп рдХреНрд▓рд┐рдЪ рдЙрджреНрдзреГрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА:

рдореА рд╣рдЬрд╛рд░ рд╡реЗрд│рд╛ рдЕрдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реЛ рдирд╛рд╣реА, рдХреНрд╡реЗрд░реА-рдлреНрд░реЗрдВрдбрд▓реА рдлреЙрд░рдореЕрдЯрдордзреНрдпреЗ рдбреЗрдЯрд╛рдЪрд╛ рд╕рдореВрд╣ рдкрд╛рд░реНрд╕ рдХрд░рдгреЗ рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рдореА рдлрдХреНрдд рд╣рдЬрд╛рд░ рдорд╛рд░реНрдЧ рд╢реЛрдзрд▓реЗ рдЖрд╣реЗрдд.

рдкреНрд░рдердо рдкреНрд░рдпрддреНрди

рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ: рдПрдХрд╛ рд╡реЗрд│реА 25 TB рдкрд╛рд░реНрд╕ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдХреЛрдгрддрд╛рд╣реА рд╕реНрд╡рд╕реНрдд рдорд╛рд░реНрдЧ рдирд╛рд╣реА.

рд╡реНрд╣рдБрдбрд░рдмрд┐рд▓реНрдЯ рд╡рд┐рджреНрдпрд╛рдкреАрдард╛рдд тАЬрдЕтАНреЕрдбрд╡реНрд╣рд╛рдиреНрд╕реНрдб рдореЗрдердбреНрд╕ рдлреЙрд░ рдмрд┐рдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧтАЭ рд╣рд╛ рдХреЛрд░реНрд╕ рдШреЗрддрд▓реНрдпрд╛рд╡рд░, рдорд▓рд╛ рдЦрд╛рддреНрд░реА рд╣реЛрддреА рдХреА рдпреБрдХреНрддреА рдмреЕрдЧрдордзреНрдпреЗ рд╣реЛрддреА. рд╕рд░реНрд╡ рдбреЗрдЯрд╛рд╡рд░ рдЪрд╛рд▓рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдирд┐рдХрд╛рд▓рд╛рдЪрд╛ рдЕрд╣рд╡рд╛рд▓ рджреЗрдгреНрдпрд╛рд╕рд╛рдареА Hive рд╕рд░реНрд╡реНрд╣рд░ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрджрд╛рдЪрд┐рдд рдПрдХ рдХрд┐рдВрд╡рд╛ рджреЛрди рддрд╛рд╕ рд▓рд╛рдЧрддреАрд▓. рдЖрдордЪрд╛ рдбреЗрдЯрд╛ AWS S3 рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдореА рд╕реЗрд╡рд╛ рд╡рд╛рдкрд░рд▓реА рдЕрдереЗрдирд╛, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ S3 рдбреЗрдЯрд╛рд╡рд░ Hive SQL рдХреНрд╡реЗрд░реА рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. рддреБрдореНрд╣рд╛рд▓рд╛ Hive рдХреНрд▓рд╕реНрдЯрд░ рд╕реЗрдЯ рдЕрдк/рд╡рд╛рдврд╡рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА рдЖрдгрд┐ рддреБрдореНрд╣реА рдлрдХреНрдд рддреБрдореНрд╣реА рд╢реЛрдзрдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рд╕рд╛рдареА рдкреИрд╕реЗ рджреНрдпрд╛.

рдореА рдЕрдереЗрдирд╛рд▓рд╛ рдорд╛рдЭрд╛ рдбреЗрдЯрд╛ рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рд╕реНрд╡рд░реВрдк рджрд░реНрд╢рд╡рд┐рд▓реНрдпрд╛рдирдВрддрд░, рдореА рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдкреНрд░рд╢реНрдирд╛рдВрд╕рд╣ рдХрд╛рд╣реА рдЪрд╛рдЪрдгреНрдпрд╛ рдХреЗрд▓реНрдпрд╛:

select * from intensityData limit 10;

рдЖрдгрд┐ рддреНрд╡рд░реАрдд рд╕реБ-рд╕рдВрд░рдЪрд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗ. рддрдпрд╛рд░.

рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдХрд╛рдорд╛рдд рдбреЗрдЯрд╛ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реЗрдкрд░реНрдпрдВрдд...

рдореЙрдбреЗрд▓рдЪреА рдЪрд╛рдЪрдгреА рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рдорд▓рд╛ рд╕рд░реНрд╡ SNP рдорд╛рд╣рд┐рддреА рдХрд╛рдврдгреНрдпрд╛рд╕ рд╕рд╛рдВрдЧрд┐рддрд▓реЗ рд╣реЛрддреЗ. рдореА рдХреНрд╡реЗрд░реА рдЪрд╛рд▓рд╡рд▓реА:


select * from intensityData 
where snp = 'rs123456';

...рдЖрдгрд┐ рд╡рд╛рдЯ рдкрд╛рд╣реВ рд▓рд╛рдЧрд▓реА. рдЖрда рдорд┐рдирд┐рдЯрд╛рдВрдирдВрддрд░ рдЖрдгрд┐ 4 TB рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рд╡рд┐рдирдВрддреА рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рдирдВрддрд░, рдорд▓рд╛ рдирд┐рдХрд╛рд▓ рдорд┐рд│рд╛рд▓рд╛. рд╕рд╛рдкрдбрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рдЪреНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдиреБрд╕рд╛рд░ рдЕрдереЗрдирд╛ рд╢реБрд▓реНрдХ рдЖрдХрд╛рд░рддреЗ, рдкреНрд░рддрд┐ рдЯреЗрд░рд╛рдмрд╛рдЗрдЯ $5. рддреНрдпрд╛рдореБрд│реЗ рдпрд╛ рдПрдХрд╛рдЪ рд╡рд┐рдирдВрддреАрд╕рд╛рдареА $20 рдЖрдгрд┐ рдЖрда рдорд┐рдирд┐рдЯреЗ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛рд╡реА рд▓рд╛рдЧреЗрд▓. рд╕рд░реНрд╡ рдбреЗрдЯрд╛рд╡рд░ рдореЙрдбреЗрд▓ рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ 38 рд╡рд░реНрд╖реЗ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛рд╡реА рд▓рд╛рдЧрд▓реА рдЖрдгрд┐ $50 рджрд╢рд▓рдХреНрд╖ рднрд░рд╛рд╡реЗ рд▓рд╛рдЧрд▓реЗ. рдЕрд░реНрдерд╛рдд, рд╣реЗ рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рдпреЛрдЧреНрдп рдирд╡реНрд╣рддреЗ.

рдкрд░реНрдХреЗрдЯ рд╡рд╛рдкрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддреЗ...

рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ: рддреБрдордЪреНрдпрд╛ Parquet рдлрд╛рдЗрд▓реНрд╕рдЪрд╛ рдЖрдХрд╛рд░ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕рдВрд╕реНрдереЗрдЪреА рдХрд╛рд│рдЬреА рдШреНрдпрд╛.

рдореА рдкреНрд░рдердо рд╕рд░реНрд╡ TSV рдЪреЗ рд░реБрдкрд╛рдВрддрд░ рдХрд░реВрди рдкрд░рд┐рд╕реНрдерд┐рддреА рдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛ рдкрд░реНрдХреЗрдЯ рдлрд╛рдЗрд▓реНрд╕. рддреЗ рдореЛрдареНрдпрд╛ рдбреЗрдЯрд╛ рд╕реЗрдЯрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реЛрдпреАрд╕реНрдХрд░ рдЖрд╣реЗрдд рдХрд╛рд░рдг рддреНрдпрд╛рддреАрд▓ рдорд╛рд╣рд┐рддреА рд╕реНрддрдВрднреАрдп рд╕реНрд╡рд░реВрдкрд╛рдд рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ: рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрдВрдн рддреНрдпрд╛рдЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдореЗрдорд░реА/рдбрд┐рд╕реНрдХ рд╡рд┐рднрд╛рдЧрд╛рдд рдЕрд╕рддреЛ, рдордЬрдХреВрд░ рдлрд╛рдЗрд▓реНрд╕рдЪреНрдпрд╛ рд╡рд┐рд░реВрджреНрдз, рдЬреНрдпрд╛ рдкрдВрдХреНрддреАрдВрдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрдВрднрд╛рдЪреЗ рдШрдЯрдХ рдЕрд╕рддрд╛рдд. рдЖрдгрд┐ рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рд╣реА рд╢реЛрдзрд╛рдпрдЪреЗ рдЕрд╕реЗрд▓ рддрд░ рдлрдХреНрдд рдЖрд╡рд╢реНрдпрдХ рдХреЙрд▓рдо рд╡рд╛рдЪрд╛. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдкреНрд░рддреНрдпреЗрдХ рдлрд╛рдЗрд▓ рд╕реНрддрдВрднрд╛рдордзреНрдпреЗ рдореВрд▓реНрдпрд╛рдВрдЪреА рд╢реНрд░реЗрдгреА рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЗ, рдореНрд╣рдгреВрди рддреБрдореНрд╣реА рд╢реЛрдзрдд рдЕрд╕рд▓реЗрд▓реЗ рдореВрд▓реНрдп рд╕реНрддрдВрднрд╛рдЪреНрдпрд╛ рд╢реНрд░реЗрдгреАрдордзреНрдпреЗ рдирд╕рд▓реНрдпрд╛рд╕, рд╕реНрдкрд╛рд░реНрдХ рд╕рдВрдкреВрд░реНрдг рдлрд╛рдЗрд▓ рд╕реНрдХреЕрди рдХрд░рдгреНрдпрд╛рдд рд╡реЗрд│ рд╡рд╛рдпрд╛ рдШрд╛рд▓рд╡рдгрд╛рд░ рдирд╛рд╣реА.

рдореА рдПрдХ рд╕рд╛рдзреЗ рдХрд╛рд░реНрдп рдХреЗрд▓реЗ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдЧреЛрдВрдж рдЖрдордЪреНрдпрд╛ TSV рд▓рд╛ Parquet рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдирд╡реАрди рдлрд╛рдЗрд▓реНрд╕ Athena рдордзреНрдпреЗ рдЯрд╛рдХрдгреНрдпрд╛рд╕рд╛рдареА. рд╕реБрдорд╛рд░реЗ 5 рддрд╛рд╕ рд▓рд╛рдЧрд▓реЗ. рдкрдг рдЬреЗрд╡реНрд╣рд╛ рдореА рд╡рд┐рдирдВрддреА рдХреЗрд▓реА рддреЗрд╡реНрд╣рд╛ рддреА рдкреВрд░реНрдг рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА рддреЗрд╡рдврд╛рдЪ рд╡реЗрд│ рдЖрдгрд┐ рдереЛрдбреЗ рдХрдореА рдкреИрд╕реЗ рд▓рд╛рдЧрд▓реЗ. рд╡рд╕реНрддреБрд╕реНрдерд┐рддреА рдЕрд╢реА рдЖрд╣реЗ рдХреА рд╕реНрдкрд╛рд░реНрдХрдиреЗ, рдХрд╛рд░реНрдп рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛, рдлрдХреНрдд рдПрдХ TSV рднрд╛рдЧ рдЕрдирдкреЕрдХ рдХреЗрд▓рд╛ рдЖрдгрд┐ рддреЛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ Parquet рднрд╛рдЧрд╛рдордзреНрдпреЗ рдареЗрд╡рд▓рд╛. рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдЕрдиреЗрдХ рд▓реЛрдХрд╛рдВрдЪреНрдпрд╛ рд╕рдВрдкреВрд░реНрдг рдиреЛрдВрджреА рдареЗрд╡рдгреНрдпрд╛рдЗрддрдХрд╛ рдореЛрдард╛ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдкреНрд░рддреНрдпреЗрдХ рдлрд╛рдЗрд▓рдордзреНрдпреЗ рд╕рд░реНрд╡ SNP рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рд╣реЛрддреЗ, рдореНрд╣рдгреВрди рд╕реНрдкрд╛рд░реНрдХрд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдорд╛рд╣рд┐рддреА рдХрд╛рдврдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡ рдлрд╛рдИрд▓реНрд╕ рдЙрдШрдбрд╛рд╡реНрдпрд╛ рд▓рд╛рдЧрд▓реНрдпрд╛.

рд╡рд┐рд╢реЗрд╖ рдореНрд╣рдгрдЬреЗ, Parquet рдЪреЗ рдбреАрдлреЙрд▓реНрдЯ (рдЖрдгрд┐ рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реЗрд▓реЗ) рдХреЙрдореНрдкреНрд░реЗрд╢рди рдкреНрд░рдХрд╛рд░, рд╕реНрдиреЕрдкреА, рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдирд╛рд╣реА. рддреНрдпрд╛рдореБрд│реЗ, рдкреНрд░рддреНрдпреЗрдХ рдПрдХреНрдЭрд┐рдХреНрдпреБрдЯрд░ рдкреВрд░реНрдг 3,5 GB рдбреЗрдЯрд╛рд╕реЗрдЯ рдЕрдирдкреЕрдХрд┐рдВрдЧ рдЖрдгрд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдХрд╛рдорд╛рд╡рд░ рдЕрдбрдХрд▓рд╛ рд╣реЛрддрд╛.

AWK рдЖрдгрд┐ R рд╡рд╛рдкрд░реВрди 25TB рдкрд╛рд░реНрд╕рд┐рдВрдЧ

рдЪрд▓рд╛ рд╕рдорд╕реНрдпрд╛ рд╕рдордЬреВрди рдШреЗрдКрдпрд╛

рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ: рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдгреЗ рдХрдареАрдг рдЖрд╣реЗ, рд╡рд┐рд╢реЗрд╖рддрдГ рдЬрд░ рдбреЗрдЯрд╛ рд╡рд┐рддрд░рд┐рдд рдХреЗрд▓рд╛ рдЕрд╕реЗрд▓.

рдорд▓рд╛ рдЕрд╕реЗ рд╡рд╛рдЯрд▓реЗ рдХреА рдЖрддрд╛ рдорд▓рд╛ рд╕рдорд╕реНрдпреЗрдЪреЗ рд╕рд╛рд░ рд╕рдордЬрд▓реЗ рдЖрд╣реЗ. рдорд▓рд╛ рдлрдХреНрдд SNP рд╕реНрддрдВрднрд╛рдиреБрд╕рд╛рд░ рдбреЗрдЯрд╛ рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рд╛рдпрдЪрд╛ рд╣реЛрддрд╛, рд▓реЛрдХрд╛рдВрдиреБрд╕рд╛рд░ рдирд╛рд╣реА. рдирдВрддрд░ рдЕрдиреЗрдХ SNPs рд╡реЗрдЧрд│реНрдпрд╛ рдбреЗрдЯрд╛ рдЪрдВрдХрдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓ рдЖрдгрд┐ рдирдВрддрд░ Parquet рдЪреЗ тАЬрд╕реНрдорд╛рд░реНрдЯтАЭ рдлрдВрдХреНрд╢рди тАЬрдореВрд▓реНрдп рд╢реНрд░реЗрдгреАрдд рдЕрд╕реЗрд▓ рддрд░рдЪ рдЙрдШрдбреЗрд▓тАЭ рд╕рд░реНрд╡ рд╡реИрднрд╡рд╛рдд рд╕реНрд╡рддрдГрд▓рд╛ рджрд░реНрд╢рд╡реЗрд▓. рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рдХреНрд▓рд╕реНрдЯрд░рдордзреНрдпреЗ рд╡рд┐рдЦреБрд░рд▓реЗрд▓реНрдпрд╛ рдЕрдмреНрдЬрд╛рд╡рдзреА рдкрдВрдХреНрддреАрдВрдордзреНрдпреЗ рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдгреЗ рд╣реЗ рдПрдХ рдХрдареАрдг рдХрд╛рдо рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рд╕рд┐рджреНрдз рдЭрд╛рд▓реЗ.

"рдореА рдПрдХ рд╡рд┐рдЪрд▓рд┐рдд рд╡рд┐рджреНрдпрд╛рд░реНрдереА рдЖрд╣реЗ" рдпрд╛ рдХрд╛рд░рдгрд╛рдореБрд│реЗ AWS рдирд┐рд╢реНрдЪрд┐рддрдкрдгреЗ рдкрд░рддрд╛рд╡рд╛ рдЬрд╛рд░реА рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдирд╛рд╣реА. рдореА Amazon Glue рд╡рд░ рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рд▓реНрдпрд╛рдирдВрддрд░, рддреЗ 2 рджрд┐рд╡рд╕ рдЪрд╛рд▓рд▓реЗ рдЖрдгрд┐ рдХреНрд░реЕрд╢ рдЭрд╛рд▓реЗ.

рд╡рд┐рднрд╛рдЬрдирд╛рдЪреЗ рдХрд╛рдп?

рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ: рд╕реНрдкрд╛рд░реНрдХрдордзреАрд▓ рд╡рд┐рднрд╛рдЬрдиреЗ рд╕рдВрддреБрд▓рд┐рдд рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдордЧ рдорд▓рд╛ рдЧреБрдгрд╕реВрддреНрд░рд╛рдВрдордзреНрдпреЗ рдбреЗрдЯрд╛рдЪреЗ рд╡рд┐рднрд╛рдЬрди рдХрд░рдгреНрдпрд╛рдЪреА рдХрд▓реНрдкрдирд╛ рд╕реБрдЪрд▓реА. рддреНрдпрд╛рдкреИрдХреА 23 рдЖрд╣реЗрдд (рдЖрдгрд┐ рдЬрд░ рддреБрдореНрд╣реА рдорд╛рдпрдЯреЛрдХреЙрдиреНрдбреНрд░рд┐рдпрд▓ рдбреАрдПрдирдП рдЖрдгрд┐ рдореЕрдк рди рдХреЗрд▓реЗрд▓реЗ рдХреНрд╖реЗрддреНрд░ рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрддрд▓реЗ рддрд░ рдмрд░реЗрдЪ рдХрд╛рд╣реА).
рд╣реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдбреЗрдЯрд╛ рд▓рд╣рд╛рди рднрд╛рдЧрд╛рдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрдИрд▓. рддреБрдореНрд╣реА рдЧреНрд▓реВ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреАрд▓ рд╕реНрдкрд╛рд░реНрдХ рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдлрдВрдХреНрд╢рдирдордзреНрдпреЗ рдлрдХреНрдд рдПрдХ рдУрд│ рдЬреЛрдбрд▓реНрдпрд╛рд╕ partition_by = "chr", рдирдВрддрд░ рдбреЗрдЯрд╛ рдмрд╛рджрд▓реНрдпрд╛рдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЧрд▓рд╛ рдЧреЗрд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ.

AWK рдЖрдгрд┐ R рд╡рд╛рдкрд░реВрди 25TB рдкрд╛рд░реНрд╕рд┐рдВрдЧ
рдЬреАрдиреЛрдордордзреНрдпреЗ рдХреНрд░реЛрдореЛрд╕реЛрдо рдирд╛рд╡рд╛рдЪреНрдпрд╛ рдЕрд╕рдВрдЦреНрдп рддреБрдХрдбреНрдпрд╛рдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЕрд╕рддреЛ.

рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рддреЗ рдХрд╛рд░реНрдп рдХреЗрд▓реЗ рдирд╛рд╣реА. рдХреНрд░реЛрдореЛрд╕реЛрдордЪреЗ рдЖрдХрд╛рд░ рд╡реЗрдЧрд╡реЗрдЧрд│реЗ рдЕрд╕рддрд╛рдд, рдпрд╛рдЪрд╛ рдЕрд░реНрде рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдорд╛рд╣рд┐рддреА рдЕрд╕рддреЗ. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рд╕реНрдкрд╛рд░реНрдХрдиреЗ рдХрд╛рдордЧрд╛рд░рд╛рдВрдирд╛ рдкрд╛рдард╡рд▓реЗрд▓реЗ рдХрд╛рд░реНрдп рд╕рдВрддреБрд▓рд┐рдд рдирд╡реНрд╣рддреЗ рдЖрдгрд┐ рд╣рд│реВрд╣рд│реВ рдкреВрд░реНрдг рдЭрд╛рд▓реЗ рдХрд╛рд░рдг рдХрд╛рд╣реА рдиреЛрдбреНрд╕ рд▓рд╡рдХрд░ рдкреВрд░реНрдг рдЭрд╛рд▓реЗ рдЖрдгрд┐ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реЛрддреЗ. рдорд╛рддреНрд░, рдХрд╛рдореЗ рдкреВрд░реНрдг рдЭрд╛рд▓реА. рдкрд░рдВрддреБ рдПрдХ рдПрд╕рдПрдирдкреА рд╡рд┐рдЪрд╛рд░рддрд╛рдирд╛, рдЕрд╕рдВрддреБрд▓рдирд╛рдореБрд│реЗ рдкреБрдиреНрд╣рд╛ рд╕рдорд╕реНрдпрд╛ рдирд┐рд░реНрдорд╛рдг рдЭрд╛рд▓реА. рдореЛрдареНрдпрд╛ рдЧреБрдгрд╕реВрддреНрд░рд╛рдВрд╡рд░ (рдореНрд╣рдгрдЬреЗ рдЬрд┐рдереЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдбреЗрдЯрд╛ рдорд┐рд│рд╡рд╛рдпрдЪрд╛ рдЖрд╣реЗ) SNPs рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рдЪреА рдХрд┐рдВрдордд рдлрдХреНрдд 10 рдЪреНрдпрд╛ рдШрдЯрдХрд╛рдВрдиреА рдХрдореА рдЭрд╛рд▓реА рдЖрд╣реЗ. рднрд░рдкреВрд░, рдкрдг рдкреБрд░реЗрд╕реЗ рдирд╛рд╣реА.

рдЬрд░ рдЖрдкрдг рддреЗ рдЖрдгрдЦреА рд▓рд╣рд╛рди рднрд╛рдЧрд╛рдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЧрд▓реЗ рддрд░?

рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ: рдХрдзреАрд╣реА 2,5 рджрд╢рд▓рдХреНрд╖ рд╡рд┐рднрд╛рдЬрдиреЗ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ рдирдХрд╛.

рдореА рд╕рд░реНрд╡ рдмрд╛рд╣реЗрд░ рдЬрд╛рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдПрд╕рдПрдирдкреАрдЪреЗ рд╡рд┐рднрд╛рдЬрди рдХреЗрд▓реЗ. рдпрд╛рдореБрд│реЗ рд╡рд┐рднрд╛рдЬрдиреЗ рд╕рдорд╛рди рдЖрдХрд╛рд░рд╛рдЪреА рдЕрд╕рд▓реНрдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдЭрд╛рд▓реА. рд╣реА рдПрдХ рд╡рд╛рдИрдЯ рдХрд▓реНрдкрдирд╛ рд╣реЛрддреА. рдореА рдЧреЛрдВрдж рд╡рд╛рдкрд░рд▓рд╛ рдЖрдгрд┐ рдПрдХ рдирд┐рд░реНрджреЛрд╖ рдУрд│ рдЬреЛрдбрд▓реА partition_by = 'snp'. рдХрд╛рд░реНрдп рд╕реБрд░реВ рдХреЗрд▓реЗ рдЖрдгрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╣реЛрдК рд▓рд╛рдЧрд▓реЗ. рдПрдХрд╛ рджрд┐рд╡рд╕рд╛рдирдВрддрд░ рдореА рддрдкрд╛рд╕рд▓реЗ рдЖрдгрд┐ рдкрд╛рд╣рд┐рд▓реЗ рдХреА S3 рд╡рд░ рдЕрджреНрдпрд╛рдк рдХрд╛рд╣реАрд╣реА рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдирд╛рд╣реА, рдореНрд╣рдгреВрди рдореА рдЯрд╛рд╕реНрдХ рдорд╛рд░рд▓рд╛. рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдХреА Glue S3 рдордзреАрд▓ рд▓рдкрд▓реЗрд▓реНрдпрд╛ рдард┐рдХрд╛рдгреА рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рдлрд╛рдЗрд▓реНрд╕ рд▓рд┐рд╣рд┐рдд рд╣реЛрддрд╛, рдЕрдиреЗрдХ рдлрд╛рдЗрд▓реНрд╕, рдХрджрд╛рдЪрд┐рдд рдХрд╛рд╣реА рджрд╢рд▓рдХреНрд╖. рдкрд░рд┐рдгрд╛рдореА, рдорд╛рдЭреНрдпрд╛ рдЪреБрдХреАрдЪреА рдХрд┐рдВрдордд рдПрдХ рд╣рдЬрд╛рд░ рдбреЙрд▓рд░реНрд╕рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдЖрд╣реЗ рдЖрдгрд┐ рдорд╛рдЭреНрдпрд╛ рдЧреБрд░реВрд▓рд╛ рд╕рдВрддреБрд╖реНрдЯ рдХреЗрд▓реЗ рдирд╛рд╣реА.

рд╡рд┐рднрд╛рдЬрди + рд╡рд░реНрдЧреАрдХрд░рдг

рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ: рдЯреНрдпреВрдирд┐рдВрдЧ рд╕реНрдкрд╛рд░реНрдХрдкреНрд░рдорд╛рдгреЗ рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдгреЗ рдЕрдЬреВрдирд╣реА рдЕрд╡рдШрдб рдЖрд╣реЗ.

рд╡рд┐рднрд╛рдЬрди рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдорд╛рдЭреНрдпрд╛ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдкреНрд░рдпрддреНрдирд╛рдд рдореА рдЧреБрдгрд╕реВрддреНрд░рд╛рдВрдЪреЗ рд╡рд┐рднрд╛рдЬрди рдХреЗрд▓реЗ рдЖрдгрд┐ рдирдВрддрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рднрд╛рдЬрдирд╛рдЪреА рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рд▓реА. рд╕рд┐рджреНрдзрд╛рдВрддрд╛рдиреБрд╕рд╛рд░, рд╣реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╡реЗрд░реАрд▓рд╛ рдЧрддреА рджреЗрдИрд▓ рдХрд╛рд░рдг рдЗрдЪреНрдЫрд┐рдд SNP рдбреЗрдЯрд╛ рджрд┐рд▓реЗрд▓реНрдпрд╛ рд╢реНрд░реЗрдгреАрдордзреНрдпреЗ рдХрд╛рд╣реА Parquet рднрд╛рдЧрд╛рдВрдордзреНрдпреЗ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рдЕрдЧрджреА рд╡рд┐рднрд╛рдЬрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рдЪреА рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдгреЗ рд╣реЗ рдПрдХ рдХрдареАрдг рдХрд╛рдо рдард░рд▓реЗ. рдкрд░рд┐рдгрд╛рдореА, рдореА рдХрд╕реНрдЯрдо рдХреНрд▓рд╕реНрдЯрд░рд╕рд╛рдареА 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, рдЗ. рдкрд░рдВрддреБ рд╕рдорд╕реНрдпрд╛ рдЕрд╢реА рдЖрд╣реЗ рдХреА SNPs рд╕рд░реНрд╡ рдЧреБрдгрд╕реВрддреНрд░рд╛рдВрдордзреНрдпреЗ рд╕рдорд╛рди рд░реАрддреАрдиреЗ рд╡рд┐рддрд░реАрдд рдХреЗрд▓реЗ рдЬрд╛рдд рдирд╛рд╣реАрдд, рдореНрд╣рдгреВрди рдЧрдЯрд╛рдЪреЗ рдЖрдХрд╛рд░ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдмрджрд▓рддреАрд▓.

AWK рдЖрдгрд┐ R рд╡рд╛рдкрд░реВрди 25TB рдкрд╛рд░реНрд╕рд┐рдВрдЧ

рдкрд░рд┐рдгрд╛рдореА, рдореА рд╢реНрд░реЗрдгреАрдВрдордзреНрдпреЗ (рд░рдБрдХ) рдкрджрд╛рдВрдЪреЗ рд╡рд┐рднрд╛рдЬрди рдХреЗрд▓реЗ. рдЖрдзреАрдЪ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реЗрд▓рд╛ рдбреЗрдЯрд╛ рд╡рд╛рдкрд░реВрди, рдореА рдЕрджреНрд╡рд┐рддреАрдп SNPs, рддреНрдпрд╛рдВрдЪреА рд╕реНрдерд┐рддреА рдЖрдгрд┐ рдЧреБрдгрд╕реВрддреНрд░рд╛рдВрдЪреА рдпрд╛рджреА рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд┐рдирдВрддреА рдХреЗрд▓реА. рдордЧ рдореА рдкреНрд░рддреНрдпреЗрдХ рдЧреБрдгрд╕реВрддреНрд░рд╛рддреАрд▓ рдбреЗрдЯрд╛рдЪреА рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рд▓реА рдЖрдгрд┐ рджрд┐рд▓реЗрд▓реНрдпрд╛ рдЖрдХрд╛рд░рд╛рдЪреНрдпрд╛ рдЧрдЯрд╛рдВрдордзреНрдпреЗ (рдмрд┐рди) SNP рдЧреЛрд│рд╛ рдХреЗрд▓реЗ. рдкреНрд░рддреНрдпреЗрдХреА 1000 SNP рдореНрд╣рдгреВ. рдпрд╛рдореБрд│реЗ рдорд▓рд╛ SNP-рддреЗ-рдЧрдЯ-рдкреНрд░рддрд┐-рдЧреБрдгрд╕реВрддреНрд░ рд╕рдВрдмрдВрдз рдорд┐рд│рд╛рд▓реЗ.

рд╕рд░рддреЗрд╢реЗрд╡рдЯреА, рдореА 75 SNP рдЪреЗ рдЧрдЯ (рдмрд┐рди) рдмрдирд╡рд▓реЗ, рдХрд╛рд░рдг рдЦрд╛рд▓реА рд╕реНрдкрд╖реНрдЯ рдХреЗрд▓реЗ рдЬрд╛рдИрд▓.

snp_to_bin <- unique_snps %>% 
  group_by(chr) %>% 
  arrange(position) %>% 
  mutate(
    rank = 1:n()
    bin = floor(rank/snps_per_bin)
  ) %>% 
  ungroup()

рдкреНрд░рдердо рд╕реНрдкрд╛рд░реНрдХ рд╡рд╛рдкрд░реВрди рдкрд╣рд╛

рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ: рд╕реНрдкрд╛рд░реНрдХ рдПрдХрддреНрд░реАрдХрд░рдг рдЬрд▓рдж рдЖрд╣реЗ, рдкрд░рдВрддреБ рд╡рд┐рднрд╛рдЬрди рдХрд░рдгреЗ рдЕрджреНрдпрд╛рдк рдорд╣рд╛рдЧ рдЖрд╣реЗ.

рдорд▓рд╛ рд╣реА рдЫреЛрдЯреА (реи.рел рджрд╢рд▓рдХреНрд╖ рдкрдВрдХреНрддреА) рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рд╕реНрдкрд╛рд░реНрдХрдордзреНрдпреЗ рд╡рд╛рдЪрд╛рдпрдЪреА рд╣реЛрддреА, рддреА рдХрдЪреНрдЪреНрдпрд╛ рдбреЗрдЯрд╛рд╕рд╣ рдПрдХрддреНрд░ рдХрд░рд╛рдпрдЪреА рд╣реЛрддреА рдЖрдгрд┐ рдирдВрддрд░ рдирд╡реНрдпрд╛рдиреЗ рдЬреЛрдбрд▓реЗрд▓реНрдпрд╛ рд╕реНрддрдВрднрд╛рджреНрд╡рд╛рд░реЗ рддреНрдпрд╛рдЪреЗ рд╡рд┐рднрд╛рдЬрди рдХрд░рд╛рдпрдЪреЗ рд╣реЛрддреЗ. 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(), рдореНрд╣рдгреВрди рд╕реНрдкрд╛рд░реНрдХрд▓рд╛ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ рдХреА рддреНрдпрд╛рдиреЗ рд╕рд░реНрд╡ рдиреЛрдбреНрд╕рд╡рд░ рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рдкрд╛рдард╡рд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ. рдЬрд░ рдбреЗрдЯрд╛ рдЖрдХрд╛рд░рд╛рдиреЗ рд▓рд╣рд╛рди рдЕрд╕реЗрд▓ рдЖрдгрд┐ рд╕рд░реНрд╡ рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕реЗрд▓ рддрд░ рд╣реЗ рдЙрдкрдпреБрдХреНрдд рдЖрд╣реЗ. рдЕрдиреНрдпрдерд╛, рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдорд╛рд░реНрдЯ рд╣реЛрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддреЗ рдЖрдгрд┐ рдЖрд╡рд╢реНрдпрдХрддреЗрдиреБрд╕рд╛рд░ рдбреЗрдЯрд╛ рд╡рд┐рддрд░рд┐рдд рдХрд░рддреЗ, рдЬреНрдпрд╛рдореБрд│реЗ рдордВрджреА рдпреЗрдК рд╢рдХрддреЗ.

рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛, рдорд╛рдЭреА рдХрд▓реНрдкрдирд╛ рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реА: рдХрд╛рд░реНрдпрд╛рдВрдиреА рдХрд╛рд╣реА рдХрд╛рд│ рдХрд╛рдо рдХреЗрд▓реЗ, рдпреБрдирд┐рдпрди рдкреВрд░реНрдг рдХреЗрд▓реА рдЖрдгрд┐ рдирдВрддрд░, рд╡рд┐рднрд╛рдЬрдирд╛рджреНрд╡рд╛рд░реЗ рд▓реЙрдиреНрдЪ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдПрдХреНрдЭрд┐рдХреНрдпреВрдЯрд░рдкреНрд░рдорд╛рдгреЗ, рддреЗ рдЕрдпрд╢рд╕реНрд╡реА рд╣реЛрдК рд▓рд╛рдЧрд▓реЗ.

AWK рдЬреЛрдбрдд рдЖрд╣реЗ

рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ: рддреБрдореНрд╣рд╛рд▓рд╛ рдореВрд▓рднреВрдд рдЧреЛрд╖реНрдЯреА рд╢рд┐рдХрд╡рд▓реНрдпрд╛ рдЬрд╛рдд рдЕрд╕рддрд╛рдирд╛ рдЭреЛрдкреВ рдирдХрд╛. 1980 рдЪреНрдпрд╛ рджрд╢рдХрд╛рдд рдирдХреНрдХреАрдЪ рдХреЛрдгреАрддрд░реА рддреБрдордЪреА рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рд▓реА рдЖрд╣реЗ.

рдпрд╛ рдХреНрд╖рдгрд╛рдкрд░реНрдпрдВрдд, рд╕реНрдкрд╛рд░реНрдХрд╕рд╣ рдорд╛рдЭреНрдпрд╛ рд╕рд░реНрд╡ рдЕрдкрдпрд╢рд╛рдВрдЪреЗ рдХрд╛рд░рдг рдХреНрд▓рд╕реНрдЯрд░рдордзреАрд▓ рдбреЗрдЯрд╛рдЪреА рдЧреЛрдВрдзрд│ рд╣реЛрддреА. рдХрджрд╛рдЪрд┐рдд рдкреВрд░реНрд╡-рдЙрдкрдЪрд╛рд░рд╛рдиреЗ рдкрд░рд┐рд╕реНрдерд┐рддреА рд╕реБрдзрд╛рд░рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ. рд╕реНрдкрд╛рд░реНрдХрд▓рд╛ тАЬрдкреВрд░реНрд╡-рд╡рд┐рднрд╛рдЬрд┐рддтАЭ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЖрд╢реЗрдиреЗ рдореА рдХрдЪреНрдЪрд╛ рдордЬрдХреВрд░ рдбреЗрдЯрд╛ рдЧреБрдгрд╕реВрддреНрд░рд╛рдВрдЪреНрдпрд╛ рд╕реНрддрдВрднрд╛рдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛.

рд╕реНрддрдВрдн рдореВрд▓реНрдпрд╛рдВрдиреБрд╕рд╛рд░ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд╕реЗ рдХрд░рд╛рд╡реЗ рдпрд╛рд╕рд╛рдареА рдореА StackOverflow рд╡рд░ рд╢реЛрдзрд▓реЗ рдЖрдгрд┐ рд╕рд╛рдкрдбрд▓реЗ рдЗрддрдХреЗ рдЫрд╛рди рдЙрддреНрддрд░. AWK рд╕рд╣ рддреБрдореНрд╣реА рдкрд░рд┐рдгрд╛рдо рдкрд╛рдард╡рдгреНрдпрд╛рдРрд╡рдЬреА рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреНрдпреЗ рд▓рд┐рд╣реВрди рд╕реНрддрдВрдн рдореВрд▓реНрдпрд╛рдВрдиреБрд╕рд╛рд░ рдордЬрдХреВрд░ рдлрд╛рдИрд▓ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реВ рд╢рдХрддрд╛ stdout.

рддреЗ рд╡рд╛рдкрд░реВрди рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА рдореА рдмреЕрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рд╣рд┐рд▓реА. рдкреЕрдХреЗрдЬ рдХреЗрд▓реЗрд▓реНрдпрд╛ 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, рдпреБрдирд┐рдХреНрд╕рдордзреНрдпреЗ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдЕрддрд┐рд╢рдп рд▓рд╡рдЪрд┐рдХ рдкрджреНрдзрдд.

AWK рдЖрдгрд┐ R рд╡рд╛рдкрд░реВрди 25TB рдкрд╛рд░реНрд╕рд┐рдВрдЧ
рдЬреЗрд╡реНрд╣рд╛ рдореА рдирд╡реАрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдкрд░реВрди рд╡рд┐рднрд╛рдЬрди рд╕реБрд░реВ рдХреЗрд▓реЗ, рддреЗрд╡реНрд╣рд╛ рд╕рд░реНрд╡рдХрд╛рд╣реА рдареАрдХ рд╣реЛрддреЗ, рдкрд░рдВрддреБ рддрд░реАрд╣реА рдПрдХ рдЕрдбрдЪрдг рд╣реЛрддреА - рдбрд┐рд╕реНрдХрд╡рд░ S3 рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреЗ рдлрд╛рд░ рдЬрд▓рдж рдирд╡реНрд╣рддреЗ рдЖрдгрд┐ рдкреВрд░реНрдгрдкрдгреЗ рд╕рдорд╛рдВрддрд░ рдирд╡реНрд╣рддреЗ. рдпрд╛рдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдореА рд╣реЗ рдХреЗрд▓реЗ:

  1. рдорд▓рд╛ рдЖрдврд│рд▓реЗ рдХреА рдбрд┐рд╕реНрдХрд╡рд░реАрд▓ рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдкреВрд░реНрдгрдкрдгреЗ рдХрд╛рдвреВрди рдЯрд╛рдХреВрди, рдереЗрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдордзреНрдпреЗ S3 рдбрд╛рдЙрдирд▓реЛрдб рд╕реНрдЯреЗрдЬрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдореА рдбрд┐рд╕реНрдХрд╡рд░ рдХрдЪреНрдЪрд╛ рдбреЗрдЯрд╛ рд▓рд┐рд╣рд┐рдгреЗ рдЯрд╛рд│реВ рд╢рдХрддреЛ рдЖрдгрд┐ рддреНрдпрд╛рд╣реВрди рд▓рд╣рд╛рди, рдЖрдгрд┐ рдореНрд╣рдгреВрди рд╕реНрд╡рд╕реНрдд, AWS рд╡рд░ рд╕реНрдЯреЛрд░реЗрдЬ рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ.
  2. рд╕рдВрдШ aws configure set default.s3.max_concurrent_requests 50 AWS CLI рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдереНрд░реЗрдбреНрд╕рдЪреА рд╕рдВрдЦреНрдпрд╛ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рд╡рд╛рдврд╡рд▓реА (рдбрд┐рдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ 10 рдЖрд╣реЗрдд).
  3. рдореА рдирд╛рд╡рд╛рддреАрд▓ n рдЕрдХреНрд╖рд░рд╛рд╕рд╣ рдиреЗрдЯрд╡рд░реНрдХ рдЧрддреАрд╕рд╛рдареА рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХреЗрд▓реЗрд▓реНрдпрд╛ EC2 рдЙрджрд╛рд╣рд░рдгрд╛рд╡рд░ рд╕реНрд╡рд┐рдЪ рдХреЗрд▓реЗ. рдорд▓рд╛ рдЖрдврд│рд▓реЗ рдЖрд╣реЗ рдХреА рдПрди-рдЗрдВрд╕реНрдЯрдиреНрд╕ рд╡рд╛рдкрд░рддрд╛рдирд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреЙрд╡рд░рдЪреА рд╣рд╛рдиреА рд▓реЛрдбрд┐рдВрдЧ рд╕реНрдкреАрдбрдЪреНрдпрд╛ рд╡рд╛рдвреАрдореБрд│реЗ рднрд░рдкрд╛рдИрдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдЖрд╣реЗ. рдмрд╣реБрддреЗрдХ рдХрд╛рдорд╛рдВрд╕рд╛рдареА рдореА 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' рдЕрд╕рд╛ рдЙрд▓реНрд▓реЗрдЦ рдЕрд╕рд╛рд╡рд╛. рдЕрд░реЗрд░реЗ.

рдирд╡реАрди рд╡рд┐рд╢реНрд▓реЗрд╖рд┐рдд рдбреЗрдЯрд╛ рд╡рд╛рдкрд░рдгреЗ

рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ: рд╕реНрдкрд╛рд░реНрдХрд▓рд╛ рдЕрд╕рдВрдкреАрдбрд┐рдд рдбреЗрдЯрд╛ рдЖрд╡рдбрддреЛ рдЖрдгрд┐ рд╡рд┐рднрд╛рдЬрдиреЗ рдПрдХрддреНрд░ рдХрд░рдгреЗ рдЖрд╡рдбрдд рдирд╛рд╣реА.

рдЖрддрд╛ рдбреЗрдЯрд╛ S3 рдордзреНрдпреЗ рдЕрдирдкреЕрдХ рдХреЗрд▓реЗрд▓рд╛ (рд╡рд╛рдЪрд╛: рд╕рд╛рдорд╛рдпрд┐рдХ рдХреЗрд▓реЗрд▓рд╛) рдЖрдгрд┐ рдЕрд░реНрдз-рд╕рдВрдШрдЯрд┐рдд рд╕реНрд╡рд░реВрдкрд╛рдд рд╣реЛрддрд╛ рдЖрдгрд┐ рдореА рдкреБрдиреНрд╣рд╛ рд╕реНрдкрд╛рд░реНрдХрд╡рд░ рдкрд░рдд рдпреЗрдК рд╢рдХрд▓реЛ. рдорд▓рд╛ рдПрдХ рдЖрд╢реНрдЪрд░реНрдп рд╡рд╛рдЯрд▓реЗ: рдорд▓рд╛ рд╣рд╡реЗ рддреЗ рд╕рд╛рдзреНрдп рдХрд░рдгреНрдпрд╛рдд рдореА рдкреБрдиреНрд╣рд╛ рдЕрдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реЛ! рдбреЗрдЯрд╛рдЪреЗ рд╡рд┐рднрд╛рдЬрди рдиреЗрдордХреЗ рдХрд╕реЗ рдЭрд╛рд▓реЗ рд╣реЗ рд╕реНрдкрд╛рд░реНрдХрд▓рд╛ рд╕рд╛рдВрдЧрдгреЗ рдлрд╛рд░ рдХрдареАрдг рд╣реЛрддреЗ. рдЖрдгрд┐ рдЬреЗрд╡реНрд╣рд╛ рдореА рд╣реЗ рдХреЗрд▓реЗ рддреЗрд╡реНрд╣рд╛рд╣реА рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА рдмрд░реЗрдЪ рд╡рд┐рднрд╛рдЬрдиреЗ рдЖрд╣реЗрдд (95 рд╣рдЬрд╛рд░), рдЖрдгрд┐ рдЬреЗрд╡реНрд╣рд╛ рдореА рд╡рд╛рдкрд░рд▓реЗ coalesce рддреНрдпрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдЬрд╡реА рдорд░реНрдпрд╛рджреЗрдкрд░реНрдпрдВрдд рдХрдореА рдХреЗрд▓реА, рдпрд╛рдореБрд│реЗ рдорд╛рдЭреЗ рд╡рд┐рднрд╛рдЬрди рдирд╖реНрдЯ рдЭрд╛рд▓реЗ. рдорд▓рд╛ рдЦрд╛рддреНрд░реА рдЖрд╣реЗ рдХреА рд╣реЗ рдирд┐рд╢реНрдЪрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ, рдкрд░рдВрддреБ рдХрд╛рд╣реА рджрд┐рд╡рд╕ рд╢реЛрдз рдШреЗрддрд▓реНрдпрд╛рдирдВрддрд░ рдорд▓рд╛ рдЙрдкрд╛рдп рд╕рд╛рдкрдбрд▓рд╛ рдирд╛рд╣реА. рдореА рдЕрдЦреЗрд░реАрд╕ рд╕реНрдкрд╛рд░реНрдХ рдордзреАрд▓ рд╕рд░реНрд╡ рдХрд╛рд░реНрдпреЗ рдкреВрд░реНрдг рдХреЗрд▓реА, рдЬрд░реА рдпрд╛рд╕ рдереЛрдбрд╛ рд╡реЗрд│ рд▓рд╛рдЧрд▓рд╛ рдЖрдгрд┐ рдорд╛рдЭреНрдпрд╛ рд╕реНрдкреНрд▓рд┐рдЯ рдкрд░реНрдХреЗрдЯ рдлрд╛рдпрд▓реА рдлрд╛рд░ рд▓рд╣рд╛рди рдирд╡реНрд╣рддреНрдпрд╛ (~200 KB). рддрдерд╛рдкрд┐, рдбреЗрдЯрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рддреЗрдереЗ рд╣реЛрддрд╛.

AWK рдЖрдгрд┐ R рд╡рд╛рдкрд░реВрди 25TB рдкрд╛рд░реНрд╕рд┐рдВрдЧ
рдЦреВрдк рд▓рд╣рд╛рди рдЖрдгрд┐ рдЕрд╕рдорд╛рди, рдЕрджреНрднреБрдд!

рд╕реНрдерд╛рдирд┐рдХ рд╕реНрдкрд╛рд░реНрдХ рдкреНрд░рд╢реНрдирд╛рдВрдЪреА рдЪрд╛рдЪрдгреА рдХрд░рдд рдЖрд╣реЗ

рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ: рд╕рд╛рдзреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рддрд╛рдирд╛ рд╕реНрдкрд╛рд░реНрдХрдордзреНрдпреЗ рдЦреВрдк рдУрд╡реНрд╣рд░рд╣реЗрдб рдЕрд╕рддреЗ.

рд╣реБрд╢рд╛рд░ рд╕реНрд╡рд░реВрдкрд╛рдд рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реВрди, рдореА рд╡реЗрдЧ рддрдкрд╛рд╕рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рд╣реЛрддреЛ. рд╕реНрдерд╛рдирд┐рдХ рд╕реНрдкрд╛рд░реНрдХ рд╕рд░реНрд╡реНрд╣рд░ рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдЖрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗрдЯ рдХрд░рд╛ рдЖрдгрд┐ рдирдВрддрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ 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 рд╕реЗрдХрдВрдж рд▓рд╛рдЧрд▓реЗ. рдмрд░реЗрдЪ рдЪрд╛рдВрдЧрд▓реЗ, рдкрд░рдВрддреБ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреЛрд╖реНрдЯреАрдЪреНрдпрд╛ рд╡рд╕реНрддреБрдорд╛рди рдЪрд╛рдЪрдгреАрд╕рд╛рдареА рдЦреВрдк рдЪрд╛рдВрдЧрд▓реЗ рдирд╛рд╣реА. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдореА рдХреЕрд╢рд┐рдВрдЧрд╕рд╣ рдЧреЛрд╖реНрдЯреАрдВрдЪрд╛ рд╡реЗрдЧ рд╡рд╛рдврд╡реВ рд╢рдХрд▓реЛ рдирд╛рд╣реА рдХрд╛рд░рдг рдЬреЗрд╡реНрд╣рд╛ рдореА рдореЗрдорд░реАрдордзреНрдпреЗ рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рдХреЕрд╢реЗ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛ рддреЗрд╡реНрд╣рд╛ рд╕реНрдкрд╛рд░реНрдХ рдиреЗрд╣рдореА рдХреНрд░реЕрд╢ рд╣реЛрддреЗ, рдЬрд░реА рдореА 50 рдкреЗрдХреНрд╖рд╛ рдХрдореА рд╡рдЬрдирд╛рдЪреНрдпрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯрд▓рд╛ 15 GB рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдореЗрдорд░реА рд╡рд╛рдЯрдк рдХреЗрд▓реА рддрд░реАрд╣реА.

AWK рдХрдбреЗ рдкрд░рдд рдЬрд╛

рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ: AWK рдордзреАрд▓ рд╕рд╣рдпреЛрдЧреА рдЕреЕрд░реЗ рдЕрддрд┐рд╢рдп рдХрд╛рд░реНрдпрдХреНрд╖рдо рдЖрд╣реЗрдд.

рдорд▓рд╛ рдЬрд╛рдгрд╡рд▓реЗ рдХреА рдореА рдЬрд╛рд╕реНрдд рд╡реЗрдЧ рдорд┐рд│рд╡реВ рд╢рдХрддреЛ. рдорд▓рд╛ рддреЗ рдЖрд╢реНрдЪрд░реНрдпрдХрд╛рд░рдХрдкрдгреЗ рдЖрдард╡рд▓реЗ рдмреНрд░реВрд╕ рдмрд╛рд░реНрдиреЗрдЯ рджреНрд╡рд╛рд░реЗ AWK рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореА рдПрдХрд╛ рдЫрд╛рди рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдмрджреНрджрд▓ рд╡рд╛рдЪрд▓реЗ "рд╕рд╣рдпреЛрдЧреА рдЕреЕрд░реЗ" рдореВрд▓рдд:, рдпрд╛ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдЬреЛрдбреНрдпрд╛ рдЖрд╣реЗрдд, рдЬреНрдпрд╛рдВрдирд╛ рдХрд╛рд╣реА рдХрд╛рд░рдгрд╛рд╕реНрддрд╡ AWK рдордзреНрдпреЗ рд╡реЗрдЧрд│реНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рд╕рдВрдмреЛрдзрд▓реЗ рдЧреЗрд▓реЗ рд╣реЛрддреЗ рдЖрдгрд┐ рдореНрд╣рдгреВрдирдЪ рдореА рддреНрдпрд╛рдВрдЪреНрдпрд╛рдмрджреНрджрд▓ рдлрд╛рд░рд╕рд╛ рд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛ рдирд╛рд╣реА. рд░реЛрдорди рдЪреЗрдкрд▓реНрдпрд╛рдХрд╛ рдЖрдард╡рд▓реЗ рдХреА "рдЕрд╕реЛрд╕рд┐рдПрдЯрд┐рд╡реНрд╣ рдЕреЕрд░реЗ" рд╣рд╛ рд╢рдмреНрдж "рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдкреЗрдЕрд░" рдпрд╛ рд╢рдмреНрджрд╛рдкреЗрдХреНрд╖рд╛ рдЦреВрдк рдЬреБрдирд╛ рдЖрд╣реЗ. рдЬрд░реА рдЖрдкрдг Google Ngram рдордзреНрдпреЗ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдкрд╣рд╛, рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗрдереЗ рд╣реА рд╕рдВрдЬреНрдЮрд╛ рджрд┐рд╕рдгрд╛рд░ рдирд╛рд╣реА, рдкрд░рдВрддреБ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд╣рдпреЛрдЧреА рдЕреЕрд░реЗ рд╕рд╛рдкрдбрддреАрд▓! рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, "рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдЬреЛрдбреА" рдмрд╣реБрддреЗрдХрджрд╛ рдбреЗрдЯрд╛рдмреЗрд╕рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЕрд╕рддреЗ, рдореНрд╣рдгреВрди рд╣реЕрд╢рдореЕрдкрд╢реА рддреБрд▓рдирд╛ рдХрд░рдгреЗ рдЕрдзрд┐рдХ рдЕрд░реНрдердкреВрд░реНрдг рдЖрд╣реЗ. рдорд▓рд╛ рдЬрд╛рдгрд╡рд▓реЗ рдХреА рдореА Spark рди рд╡рд╛рдкрд░рддрд╛ рдмрд┐рди рдЯреЗрдмрд▓ рдЖрдгрд┐ рд░реЙ рдбреЗрдЯрд╛рд╕рд╣ рдорд╛рдЭреЗ SNPs рд╕рдВрдмрджреНрдз рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдпрд╛ рд╕рд╣рдпреЛрдЧреА рдЕреЕрд░реЗ рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ.

рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, 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 рд╕реЛрдмрддрдЪреНрдпрд╛ рдЖрдзреАрдЪреНрдпрд╛ рдкреНрд░рдпреЛрдЧрд╛рддреВрди рдЙрд░рд▓реЗрд▓рд╛ рд╕рд░реНрд╡ рдХрдЪреНрдЪрд╛ рдбреЗрдЯрд╛ рдореА рдЧреБрдгрд╕реВрддреНрд░рд╛рдВрд╡рд░ рдлреЛрд▓реНрдбрд░рдордзреНрдпреЗ рд╡рд┐рдЦреБрд░рд▓рд╛ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдЖрддрд╛ рдореА рдПрдХрд╛рд╡реЗрд│реА рдПрдХрд╛ рдЧреБрдгрд╕реВрддреНрд░рд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рджреБрд╕рд░реА рдмреЕрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рд╣реВ рд╢рдХреЗрди рдЖрдгрд┐ 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. рдкрд░рд┐рдгрд╛рдореА, рдбрд┐рд╕реНрдХрд╡рд░ рдЕрдиреЗрдХ рд▓рд╣рд╛рди рдлрд╛рдпрд▓реА рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд (рдпрд╛рд╕рд╛рдареА рдореА рдЯреЗрд░рд╛рдмрд╛рдЗрдЯ рдИрдмреАрдПрд╕ рд╡реНрд╣реЙрд▓реНрдпреВрдо рд╡рд╛рдкрд░рд▓реЗ).

рджреБрд╕рд▒реНрдпрд╛ рд╡рд┐рднрд╛рдЧрд╛рддреАрд▓ рдХрдиреНрд╡реНрд╣реЗрдпрд░ parallel рдЧрдЯрд╛рдВрдордзреВрди (рдмрд┐рди) рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╡реИрдпрдХреНрддрд┐рдХ рдлрд╛рдпрд▓реА рд╕рд╛рдорд╛рдиреНрдп CSV c рдордзреНрдпреЗ рдПрдХрддреНрд░ рдХрд░рддрд╛рдд catрдЖрдгрд┐ рдирдВрддрд░ рдирд┐рд░реНрдпрд╛рддреАрд╕рд╛рдареА рдкрд╛рдард╡рддреЗ.

рдЖрд░ рдордзреНрдпреЗ рдкреНрд░рд╕рд╛рд░рдг?

рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ: рддреБрдореНрд╣реА рд╕рдВрдкрд░реНрдХ рдХрд░реВ рд╢рдХрддрд╛ stdin ╨╕ stdout рдЖрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреВрди, рдЖрдгрд┐ рдореНрд╣рдгреВрди рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдордзреНрдпреЗ рд╡рд╛рдкрд░рд╛.

рддреБрдордЪреНрдпрд╛ рдмреЕрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреНрдпреЗ рд╣реА рдУрд│ рддреБрдордЪреНрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдЖрд▓реА рдЕрд╕реЗрд▓: ...cat chunked/*_bin_{}_*.csv | ./upload_as_rds.R.... рд╣реЗ рд╕рд░реНрд╡ рдПрдХрддреНрд░рд┐рдд рдЧрдЯ рдлрд╛рдпрд▓реА (рдмрд┐рди) рдЦрд╛рд▓реАрд▓ R рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреНрдпреЗ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд░рддреЗ. {} рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрдВрддреНрд░ рдЖрд╣реЗ parallel, рдЬреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рд╡рд╛рд╣рд╛рдд рдкрд╛рдард╡рдгрд╛рд░рд╛ рдХреЛрдгрддрд╛рд╣реА рдбреЗрдЯрд╛ рдереЗрдЯ рдХрдорд╛рдВрдбрдордзреНрдпреЗрдЪ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рддреЗ. рдкрд░реНрдпрд╛рдп {#} рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдереНрд░реЗрдб рдЖрдпрдбреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ, рдЖрдгрд┐ {%} рдЬреЙрдм рд╕реНрд▓реЙрдЯ рдХреНрд░рдорд╛рдВрдХрд╛рдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ (рдкреБрдирд░рд╛рд╡реГрддреНрддреА, рдкрд░рдВрддреБ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдХрдзреАрд╣реА). рд╕рд░реНрд╡ рдкрд░реНрдпрд╛рдпрд╛рдВрдЪреА рдпрд╛рджреА рдордзреНрдпреЗ рдЖрдврд│реВ рд╢рдХрддреЗ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг.

#!/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, рдЖрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреНрдпреЗ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХреЗрд▓реЗрд▓рд╛ рдбреЗрдЯрд╛ рдлреНрд░реЗрдордордзреНрдпреЗ рд▓реЛрдб рдХреЗрд▓рд╛ рдЬрд╛рддреЛ, рдЬреЛ рдирдВрддрд░ рдлреЙрд░реНрдордордзреНрдпреЗ рдЕрд╕рддреЛ .rds- рдлрд╛рдЗрд▓ рд╡рд╛рдкрд░реВрди aws.s3 рдереЗрдЯ S3 рд╡рд░ рд▓рд┐рд╣рд┐рд▓реЗ.

RDS рд╣реЗ Parquet рдЪреНрдпрд╛ рдХрдирд┐рд╖реНрда рдЖрд╡реГрддреНрддреАрд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ, рд╕реНрдкреАрдХрд░ рд╕реНрдЯреЛрд░реЗрдЬрдЪреНрдпрд╛ рдлреНрд░рд┐рд▓реНрд╕рд╢рд┐рд╡рд╛рдп.

рдмреЕрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреВрд░реНрдг рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рдорд▓рд╛ рдПрдХ рдмрдВрдбрд▓ рдорд┐рд│рд╛рд▓реЗ .rdsS3 рдордзреНрдпреЗ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдлрд╛рдЗрд▓реНрд╕, рдЬреНрдпрд╛рдиреЗ рдорд▓рд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдо рдХреЙрдореНрдкреНрд░реЗрд╢рди рдЖрдгрд┐ рдЕрдВрдЧрднреВрдд рдкреНрд░рдХрд╛рд░ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджрд┐рд▓реА.

рдмреНрд░реЗрдХ R рдЪрд╛ рд╡рд╛рдкрд░ рдЕрд╕реВрдирд╣реА, рд╕рд░реНрд╡рдХрд╛рд╣реА рдЦреВрдк рд▓рд╡рдХрд░ рдХрд╛рд░реНрдп рдХрд░рддреЗ. рдЖрд╢реНрдЪрд░реНрдпрд╛рдЪреА рдЧреЛрд╖реНрдЯ рдирд╛рд╣реА рдХреА, R рдЪреЗ рднрд╛рдЧ рдЬреЗ рдбреЗрдЯрд╛ рд╡рд╛рдЪрддрд╛рдд рдЖрдгрд┐ рд▓рд┐рд╣рд┐рддрд╛рдд рддреЗ рдЕрддреНрдпрдВрдд рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХреЗрд▓реЗрд▓реЗ рдЕрд╕рддрд╛рдд. рдПрдХрд╛ рдордзреНрдпрдо рдЖрдХрд╛рд░рд╛рдЪреНрдпрд╛ рдЧреБрдгрд╕реВрддреНрд░рд╛рд╡рд░ рдЪрд╛рдЪрдгреА рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, C5n.4xl рдЙрджрд╛рд╣рд░рдгрд╛рд╡рд░ рдХрд╛рдо рд╕реБрдорд╛рд░реЗ рджреЛрди рддрд╛рд╕рд╛рдВрдд рдкреВрд░реНрдг рдЭрд╛рд▓реЗ.

S3 рдорд░реНрдпрд╛рджрд╛

рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ: рд╕реНрдорд╛рд░реНрдЯ рдкрде рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╛рдареА рдзрдиреНрдпрд╡рд╛рдж, S3 рдЕрдиреЗрдХ рдлрд╛рдИрд▓реНрд╕ рд╣рд╛рддрд╛рд│реВ рд╢рдХрддреЗ.

S3 рдордзреНрдпреЗ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЕрдиреЗрдХ рдлрд╛рдИрд▓реНрд╕ рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЕрд╕реЗрд▓ рдХреА рдирд╛рд╣реА рдпрд╛рдЪреА рдорд▓рд╛ рднрд┐рддреА рд╣реЛрддреА. рдореА рдлрд╛рдЗрд▓рдЪреА рдирд╛рд╡реЗ рдЕрд░реНрдердкреВрд░реНрдг рдмрдирд╡реВ рд╢рдХрддреЛ, рдкрд░рдВрддреБ S3 рддреНрдпрд╛рдВрдирд╛ рдХрд╕реЗ рд╢реЛрдзреЗрд▓?

AWK рдЖрдгрд┐ R рд╡рд╛рдкрд░реВрди 25TB рдкрд╛рд░реНрд╕рд┐рдВрдЧ
S3 рдордзреАрд▓ рдлреЛрд▓реНрдбрд░реНрд╕ рдлрдХреНрдд рд╢реЛрд╕рд╛рдареА рдЖрд╣реЗрдд, рдЦрд░рдВ рддрд░ рд╕рд┐рд╕реНрдЯреАрдорд▓рд╛ рдЪрд┐рдиреНрд╣рд╛рдд рд░рд╕ рдирд╛рд╣реА /. S3 FAQ рдкреГрд╖реНрдард╛рд╡рд░реВрди.

рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдХреА S3 рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╛рдИрд▓рдЪрд╛ рдорд╛рд░реНрдЧ рд╣реЕрд╢ рдЯреЗрдмрд▓ рдХрд┐рдВрд╡рд╛ рджрд╕реНрддрдРрд╡рдЬ-рдЖрдзрд╛рд░рд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдПрдХ рд╕рд╛рдзреА рдХреА рдореНрд╣рдгреВрди рджрд░реНрд╢рд╡рддреЗ. рдмрд╛рджрд▓реАрдЪрд╛ рдЯреЗрдмрд▓ рдореНрд╣рдгреВрди рд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ рдЖрдгрд┐ рдлрд╛рдпрд▓реА рддреНрдпрд╛ рдЯреЗрдмрд▓рдордзреАрд▓ рд░реЗрдХреЙрд░реНрдб рдорд╛рдирд▓реНрдпрд╛ рдЬрд╛рдК рд╢рдХрддрд╛рдд.

Amazon рд╡рд░ рдирдлрд╛ рдХрдорд╛рд╡рдгреНтАНрдпрд╛рд╕рд╛рдареА рдЧрддреА рдЖрдгрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдорд╣рддреНтАНрддреНтАНрд╡рд╛рдЪреНтАНрдпрд╛ рдЕрд╕рд▓реНтАНрдпрд╛рдиреЗ, рд╣реА рдлрд╛рдИрд▓-рдкрде рд╕рд┐рд╕реНтАНрдЯрдо рдлреНрд░реЗрдХрд┐рдВрдЧ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдЭрд╛рд▓реА рдЖрд╣реЗ рдпрд╛рдд рдирд╡рд▓ рдирд╛рд╣реА. рдореА рд╢рд┐рд▓реНрд▓рдХ рд╢реЛрдзрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛: рдЬреЗрдгреЗрдХрд░реВрди рдорд▓рд╛ рдЦреВрдк рд╡рд┐рдирдВрддреНрдпрд╛ рдХрд░рд╛рд╡реНрдпрд╛ рд▓рд╛рдЧрд▓реНрдпрд╛ рдирд╛рд╣реАрдд, рдкрд░рдВрддреБ рд╡рд┐рдирдВрддреНрдпрд╛ рддреНрд╡рд░реАрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЭрд╛рд▓реНрдпрд╛. рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА рд╕реБрдорд╛рд░реЗ 20 рд╣рдЬрд╛рд░ рдмрд┐рди рдлрд╛рдпрд▓реА рдмрдирд╡рд┐рдгреЗ рдЪрд╛рдВрдЧрд▓реЗ рдЖрд╣реЗ. рдорд▓рд╛ рд╡рд╛рдЯрддреЗ рдХреА рдЖрдореНрд╣реА рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХрд░рдгреЗ рд╕реБрд░реВ рдареЗрд╡рд▓реНрдпрд╛рд╕, рдЖрдореНрд╣реА рд╡реЗрдЧ рд╡рд╛рдврд╡реВ рд╢рдХрддреЛ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдлрдХреНрдд рдбреЗрдЯрд╛рд╕рд╛рдареА рдПрдХ рд╡рд┐рд╢реЗрд╖ рдмрд╛рджрд▓реА рдмрдирд╡рдгреЗ, рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рд▓реБрдХрдЕрдк рдЯреЗрдмрд▓рдЪрд╛ рдЖрдХрд╛рд░ рдХрдореА рдХрд░рдгреЗ). рдкрдг рдкреБрдврдЪреНрдпрд╛ рдкреНрд░рдпреЛрдЧрд╛рдВрд╕рд╛рдареА рд╡реЗрд│ рдХрд┐рдВрд╡рд╛ рдкреИрд╕рд╛ рдирд╡реНрд╣рддрд╛.

рдХреНрд░реЙрд╕ рд╕реБрд╕рдВрдЧрддрддрд╛ рдмрджреНрджрд▓ рдХрд╛рдп?

рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ: рд╡рд╛рдпрд╛ рдЧреЗрд▓реЗрд▓реНрдпрд╛ рд╡реЗрд│реЗрдЪреЗ рдкрд╣рд┐рд▓реЗ рдХрд╛рд░рдг рдореНрд╣рдгрдЬреЗ рддреБрдордЪреА рд╕реНрдЯреЛрд░реЗрдЬ рдкрджреНрдзрдд рдЕрдХрд╛рд▓реА рдЕрдиреБрдХреВрд▓ рдХрд░рдгреЗ.

рдпрд╛ рдЯрдкреНрдкреНрдпрд╛рд╡рд░, рд╕реНрд╡рддрдГрд▓рд╛ рд╡рд┐рдЪрд╛рд░рдгреЗ рдЦреВрдк рдорд╣рддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ: "рдорд╛рд▓рдХреАрдЪреЗ рдлрд╛рдЗрд▓ рд╕реНрд╡рд░реВрдк рдХрд╛ рд╡рд╛рдкрд░рд╛рд╡реЗ?" рд▓реЛрдбрд┐рдВрдЧ рдЧрддреА (gzipped CSV рдлрд╛рдпрд▓реАрдВрдирд╛ рд▓реЛрдб рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА 7 рдкрдЯ рдЬрд╛рд╕реНрдд рд╡реЗрд│ рд▓рд╛рдЧрд▓рд╛) рдЖрдгрд┐ рдЖрдордЪреНрдпрд╛ рд╡рд░реНрдХрдлреНрд▓реЛрд╕рд╣ рд╕реБрд╕рдВрдЧрддрддрд╛ рд╣реЗ рдХрд╛рд░рдг рдЖрд╣реЗ. R рд▓рд╛ рд╕реНрдкрд╛рд░реНрдХ рд▓реЛрдб рд╢рд┐рд╡рд╛рдп Parquet (рдХрд┐рдВрд╡рд╛ рдмрд╛рдг) рдлрд╛рдЗрд▓реНрд╕ рд╕рд╣рдЬ рд▓реЛрдб рдХрд░рддрд╛ рдпреЗрддрд╛рдд рдХрд╛ рдпрд╛рдЪрд╛ рдореА рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ. рдЖрдордЪреНрдпрд╛ рд▓реЕрдмрдордзреАрд▓ рдкреНрд░рддреНрдпреЗрдХрдЬрдг рдЖрд░ рд╡рд╛рдкрд░рддреЛ рдЖрдгрд┐ рдорд▓рд╛ рдбреЗрдЯрд╛ рджреБрд╕рд░реНтАНрдпрд╛ рдлреЙрд░рдореЕрдЯрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рд╛рдпрдЪрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕, рдорд╛рдЭреНрдпрд╛рдХрдбреЗ рдореВрд│ рдордЬрдХреВрд░ рдбреЗрдЯрд╛ рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рдореА рдкреБрдиреНрд╣рд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЪрд╛рд▓рд╡реВ рд╢рдХрддреЛ.

рдХрд╛рдорд╛рдЪреА рд╡рд┐рднрд╛рдЧрдгреА

рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ: рдЬреЙрдмреНрд╕ рдореЕрдиреНрдпреБрдЕрд▓реА рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ рдирдХрд╛, рд╕рдВрдЧрдгрдХрд╛рд▓рд╛ рдХрд░реВ рджреНрдпрд╛.

рдореА рдПрдХрд╛ рдХреНрд░реЛрдореЛрд╕реЛрдорд╡рд░ рд╡рд░реНрдХрдлреНрд▓реЛ рдбреАрдмрдЧ рдХреЗрд▓рд╛ рдЖрд╣реЗ, рдЖрддрд╛ рдорд▓рд╛ рдЗрддрд░ рд╕рд░реНрд╡ рдбреЗрдЯрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рд╛рдпрдЪреА рдЖрд╣реЗ.
рдорд▓рд╛ рд░реВрдкрд╛рдВрддрд░рдгрд╛рд╕рд╛рдареА рдЕрдиреЗрдХ EC2 рдЙрджрд╛рд╣рд░рдгреЗ рд╡рд╛рдврд╡рд╛рдпрдЪреА рд╣реЛрддреА, рдкрд░рдВрддреБ рддреНрдпрд╛рдЪ рд╡реЗрд│реА рдорд▓рд╛ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЬреЙрдмреНрд╕рд╡рд░ рдЦреВрдк рдЕрд╕рдВрддреБрд▓рд┐рдд рднрд╛рд░ рдорд┐рд│рдгреНрдпрд╛рдЪреА рднреАрддреА рд╣реЛрддреА (рдЬрд╕реЗ рд╕реНрдкрд╛рд░реНрдХрд▓рд╛ рдЕрд╕рдВрддреБрд▓рд┐рдд рд╡рд┐рднрд╛рдЬрдирд╛рдВрдЪрд╛ рддреНрд░рд╛рд╕ рдЭрд╛рд▓рд╛). рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдорд▓рд╛ рдкреНрд░рддрд┐ рдЧреБрдгрд╕реВрддреНрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рдврд╡рд┐рдгреНрдпрд╛рдд рд╕реНрд╡рд╛рд░рд╕реНрдп рдирд╡реНрд╣рддреЗ, рдХрд╛рд░рдг 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)

рдореНрд╣рдгреВрди рдореА рдХрд╛рд░реНрдпрд╛рдВрдЪрд╛ рдПрдХ рд╕рдВрдЪ рдкреВрд░реНрдг рдХреЗрд▓рд╛ рдЬреЗ рдЖрдХрд╛рд░рд╛рдд рдЦреВрдк рд╕рд╛рд░рдЦреЗ рд╣реЛрддреЗ. рдордЧ рдорд╛рдЭреНрдпрд╛ рдорд╛рдЧреАрд▓ рдмреЕрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓рд╛ рдПрдХрд╛ рдореЛрдареНрдпрд╛ рд▓реВрдкрдордзреНрдпреЗ рдЧреБрдВрдбрд╛рд│рдгреЗ рдмрд╛рдХреА рд╣реЛрддреЗ 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 рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рдВрдирд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рдВрдЪреНрдпрд╛ рдмреЕрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджрд┐рд▓реНрдпрд╛. рддреЗ рдзрд╛рд╡рд▓реЗ рдЖрдгрд┐ рдЖрдкреЛрдЖрдк рдмрдВрдж рдЭрд╛рд▓реЗ, рдореНрд╣рдгреВрди рдореА рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢рдХреНрддреАрд╕рд╛рдареА рдкреИрд╕реЗ рджреЗрдд рдирд╡реНрд╣рддреЛ.

aws ec2 run-instances ...
--tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=<<job_name>>}]" 
--user-data file://<<job_script_loc>>

рдЪрд▓рд╛ рдкреЕрдХ рдХрд░реВрдпрд╛!

рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ: рдПрдкреАрдЖрдп рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд╕реБрд▓рднрддреЗрд╕рд╛рдареА рдЖрдгрд┐ рд▓рд╡рдЪрд┐рдХрддреЗрд╕рд╛рдареА рд╕реЛрдкреЗ рдЕрд╕рд╛рд╡реЗ.

рд╢реЗрд╡рдЯреА рдорд▓рд╛ рдпреЛрдЧреНрдп рдард┐рдХрд╛рдгреА рдЖрдгрд┐ рдлреЙрд░реНрдордордзреНрдпреЗ рдбреЗрдЯрд╛ рдорд┐рд│рд╛рд▓рд╛. рдорд╛рдЭреНрдпрд╛ рд╕рд╣рдХрд╛рд░реНтАНрдпрд╛рдВрд╕рд╛рдареА рд╢рдХреНрдп рддрд┐рддрдХреНрдпрд╛ рдбреЗрдЯрд╛ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд▓рдн рдХрд░рдгреЗ рдмрд╛рдХреА рдЖрд╣реЗ. рдорд▓рд╛ рд╡рд┐рдирдВрддреНрдпрд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд╕рд╛рдзрд╛ API рдмрдирд╡рд╛рдпрдЪрд╛ рд╣реЛрддрд╛. рдЬрд░ рднрд╡рд┐рд╖реНрдпрд╛рдд рдореА рдпреЗрдереВрди рд╕реНрд╡рд┐рдЪ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛ .rds Parquet рдлрд╛рдпрд▓реАрдВрд╕рд╛рдареА, рддрд░ рд╣реА рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рд╕рдорд╕реНрдпрд╛ рдЕрд╕рд╛рд╡реА, рдорд╛рдЭреНрдпрд╛ рд╕рд╣рдХрд╛рд▒реНрдпрд╛рдВрд╕рд╛рдареА рдирд╛рд╣реА. рдпрд╛рд╕рд╛рдареА рдореА рдЕрдВрддрд░реНрдЧрдд рдЖрд░ рдкреЕрдХреЗрдЬ рдмрдирд╡рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛.

рдлрдВрдХреНрд╢рдирдЪреНрдпрд╛ рдЖрд╕рдкрд╛рд╕ рдЖрдпреЛрдЬрд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдлрдХреНрдд рдХрд╛рд╣реА рдбреЗрдЯрд╛ рдНрдХреНрд╕реЗрд╕ рдлрдВрдХреНрд╢рдиреНрд╕ рдЕрд╕рд▓реЗрд▓реЗ рдПрдХ рдЕрддрд┐рд╢рдп рд╕реЛрдкреЗ рдкреЕрдХреЗрдЬ рддрдпрд╛рд░ рдЖрдгрд┐ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдХрд░рд╛ get_snp. рдореА рдорд╛рдЭреНрдпрд╛ рд╕рд╣рдХрд╛рд▒реНрдпрд╛рдВрд╕рд╛рдареА рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯрд╣реА рдмрдирд╡рд▓реА рдЖрд╣реЗ pkgdown, рддреНрдпрд╛рдореБрд│реЗ рддреЗ рд╕рд╣рдЬрдкрдгреЗ рдЙрджрд╛рд╣рд░рдгреЗ рдЖрдгрд┐ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдкрд╛рд╣реВ рд╢рдХрддрд╛рдд.

AWK рдЖрдгрд┐ R рд╡рд╛рдкрд░реВрди 25TB рдкрд╛рд░реНрд╕рд┐рдВрдЧ

рд╕реНрдорд╛рд░реНрдЯ рдХреЕрд╢рд┐рдВрдЧ

рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ: рддреБрдордЪрд╛ рдбреЗрдЯрд╛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рддрдпрд╛рд░ рдЕрд╕рд▓реНрдпрд╛рд╕, рдХреЕрд╢рд┐рдВрдЧ рд╕реЛрдкреЗ рд╣реЛрдИрд▓!

рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣рд╛рдВрдкреИрдХреА рдПрдХрд╛рдиреЗ 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. рд╣рд╛ рд╕рдореВрд╣ (рдмрд┐рди) рдордзреАрд▓ рд╕рд░реНрд╡ рдЕрдирдиреНрдп SNPs рдЪрд╛ рдПрдХ рдЕреЕрд░реЗ рдЖрд╣реЗ, рдЬреЛ рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдзреАрдкрд╛рд╕реВрди рдЖрдзреАрдЪреНрдпрд╛ рдХреНрд╡реЗрд░реАрдордзреАрд▓ рдбреЗрдЯрд╛ рдЖрд╣реЗ рдХрд╛ рддреЗ рддреНрд╡рд░рд┐рдд рддрдкрд╛рд╕рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ. рдпрд╛ рдХреЛрдбрд╕рд╣ рдЧрдЯрд╛рддреАрд▓ (рдмрд┐рди) рд╕рд░реНрд╡ 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 
}

рдирд┐рдХрд╛рд▓

рдЖрддрд╛ рдЖрдореНрд╣реА рдореЙрдбреЗрд▓ рдЖрдгрд┐ рдкрд░рд┐рд╕реНрдерд┐рддреА рдЪрд╛рд▓рд╡реВ рд╢рдХрддреЛ (рдЖрдгрд┐ рдЧрд╛рдВрднреАрд░реНрдпрд╛рдиреЗ рд╕реБрд░реБрд╡рд╛рдд рдХреЗрд▓реА рдЖрд╣реЗ) рдЬреА рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рдкреВрд░реНрд╡реА рдЕрдЧрдореНрдп рд╣реЛрддреА. рд╕рд░реНрд╡рд╛рдд рдЪрд╛рдВрдЧрд▓реА рдЧреЛрд╖реНрдЯ рдореНрд╣рдгрдЬреЗ рдорд╛рдЭреНрдпрд╛ рдкреНрд░рдпреЛрдЧрд╢рд╛рд│реЗрддреАрд▓ рд╕рд╣рдХрд╛рд▒реНрдпрд╛рдВрдирд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреБрдВрддрд╛рдЧреБрдВрддреАрдмрджреНрджрд▓ рд╡рд┐рдЪрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА. рддреНрдпрд╛рдВрдЪреНрдпрд╛рдХрдбреЗ рдлрдХреНрдд рдПрдХ рдХрд╛рд░реНрдп рдЖрд╣реЗ рдЬреЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ.

рдЖрдгрд┐ рдЬрд░реА рдкреЕрдХреЗрдЬрдиреЗ рддреНрдпрд╛рдВрдирд╛ рддрдкрд╢реАрд▓ рджрд┐рд▓реЗрд▓рд╛ рдЕрд╕рд▓рд╛ рддрд░реА, рдореА рдбреЗрдЯрд╛рдЪреЗ рд╕реНрд╡рд░реВрдк рдЗрддрдХреЗ рд╕реЛрдкреЗ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛ рдХреА рдореА рдЙрджреНрдпрд╛ рдЕрдЪрд╛рдирдХ рдЧрд╛рдпрдм рдЭрд╛рд▓реЛ рддрд░ рддреЗ рд╕рдордЬреВ рд╢рдХрддреАрд▓...

рд╡реЗрдЧ рд▓рдХреНрд╖рдгреАрдп рд╡рд╛рдврд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рд╕рд╣рд╕рд╛ рдХрд╛рд░реНрдпрд╛рддреНрдордХрджреГрд╖реНрдЯреНрдпрд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЬреАрдиреЛрдордЪреЗ рддреБрдХрдбреЗ рд╕реНрдХреЕрди рдХрд░рддреЛ. рдкреВрд░реНрд╡реА, рдЖрдореНрд╣реА рд╣реЗ рдХрд░реВ рд╢рдХрдд рдирд╡реНрд╣рддреЛ (рддреЗ рдЦреВрдк рдорд╣рд╛рдЧ рд╣реЛрддреЗ), рдкрд░рдВрддреБ рдЖрддрд╛, рдЧрдЯ (рдмрд┐рди) рд░рдЪрдирд╛ рдЖрдгрд┐ рдХреЕрд╢рд┐рдВрдЧрдмрджреНрджрд▓ рдзрдиреНрдпрд╡рд╛рдж, рдПрдХрд╛ рдПрд╕рдПрдирдкреАрд╕рд╛рдареА рд╡рд┐рдирдВрддреА рд╕рд░рд╛рд╕рд░реА 0,1 рд╕реЗрдХрдВрджрд╛рдВрдкреЗрдХреНрд╖рд╛ рдХрдореА рд╡реЗрд│ рдШреЗрддреЗ рдЖрдгрд┐ рдбреЗрдЯрд╛ рд╡рд╛рдкрд░ рдЗрддрдХрд╛ рдЖрд╣реЗ S3 рдЪреА рдХрд┐рдВрдордд рд╢реЗрдВрдЧрджрд╛рдгреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рдХрдореА рдЖрд╣реЗ.

рдирд┐рд╖реНрдХрд░реНрд╖

рд╣рд╛ рд▓реЗрдЦ рдЕрдЬрд┐рдмрд╛рдд рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рдирд╛рд╣реА. рдЙрдкрд╛рдп рд╡реИрдпрдХреНрддрд┐рдХ рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдЖрдгрд┐ рдЬрд╡рд│рдЬрд╡рд│ рдирдХреНрдХреАрдЪ рдЗрд╖реНрдЯрддрдо рдирд╛рд╣реА. рдЙрд▓рдЯ рддреЗ рдПрдХ рдкреНрд░рд╡рд╛рд╕рд╡рд░реНрдгрди рдЖрд╣реЗ. рдорд▓рд╛ рдЗрддрд░рд╛рдВрдиреА рд╕рдордЬреВрди рдШреНрдпрд╛рдпрдЪреЗ рдЖрд╣реЗ рдХреА рдЕрд╕реЗ рдирд┐рд░реНрдгрдп рдкреВрд░реНрдгрдкрдгреЗ рдбреЛрдХреНрдпрд╛рдд рддрдпрд╛рд░ рдЭрд╛рд▓реЗрд▓реЗ рджрд┐рд╕рдд рдирд╛рд╣реАрдд, рддреЗ рдЪрд╛рдЪрдгреА рдЖрдгрд┐ рддреНрд░реБрдЯреАрдЪреЗ рдкрд░рд┐рдгрд╛рдо рдЖрд╣реЗрдд. рддрд╕реЗрдЪ, рдЬрд░ рддреБрдореНрд╣реА рдбреЗрдЯрд╛ рд╕рд╛рдпрдВрдЯрд┐рд╕реНрдЯ рд╢реЛрдзрдд рдЕрд╕рд╛рд▓, рддрд░ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА рд╣реА рд╕рд╛рдзрдиреЗ рдкреНрд░рднрд╛рд╡реАрдкрдгреЗ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдиреБрднрд╡рд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рддреЗ рдЖрдгрд┐ рдЕрдиреБрднрд╡рд╛рд╕рд╛рдареА рдкреИрд╕реЗ рд▓рд╛рдЧрддрд╛рдд. рдорд▓рд╛ рдЖрдирдВрдж рдЖрд╣реЗ рдХреА рдорд╛рдЭреНрдпрд╛рдХрдбреЗ рдкреИрд╕реЗ рднрд░рдгреНрдпрд╛рдЪреЗ рд╕рд╛рдзрди рд╣реЛрддреЗ, рдкрд░рдВрддреБ рдорд╛рдЭреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рддреЗрдЪ рдХрд╛рдо рдЪрд╛рдВрдЧрд▓реЗ рдХрд░реВ рд╢рдХрдгрд╛рд░реНтАНрдпрд╛ рдЗрддрд░ рдЕрдиреЗрдХрд╛рдВрдирд╛ рдкреИрд╢рд╛рдВрдЪреНрдпрд╛ рдХрдорддрд░рддреЗрдореБрд│реЗ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рдЪреА рд╕рдВрдзреА рдХрдзреАрдЪ рдорд┐рд│рдгрд╛рд░ рдирд╛рд╣реА.

рдореЛрдареА рдбреЗрдЯрд╛ рд╕рд╛рдзрдиреЗ рдмрд╣реБрдореБрдЦреА рдЖрд╣реЗрдд. рддреБрдордЪреНрдпрд╛рдХрдбреЗ рд╡реЗрд│ рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА рд╕реНрдорд╛рд░реНрдЯ рдбреЗрдЯрд╛ рдХреНрд▓реАрдирд┐рдВрдЧ, рд╕реНрдЯреЛрд░реЗрдЬ рдЖрдгрд┐ рдПрдХреНрд╕рдЯреНрд░реЕрдХреНрд╢рди рддрдВрддреНрд░рд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЬрд▓рдж рд╕рдорд╛рдзрд╛рди рдирдХреНрдХреАрдЪ рд▓рд┐рд╣реВ рд╢рдХрддрд╛. рд╢реЗрд╡рдЯреА рддреЗ рдЦрд░реНрдЪ-рд▓рд╛рдн рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рд╡рд░ рдпреЗрддреЗ.

рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ:

  • рдПрдХрд╛ рд╡реЗрд│реА 25 рдЯреАрдмреА рдкрд╛рд░реНрд╕ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдХреЛрдгрддрд╛рд╣реА рд╕реНрд╡рд╕реНрдд рдорд╛рд░реНрдЧ рдирд╛рд╣реА;
  • рдЖрдкрд▓реНрдпрд╛ Parquet рдлрд╛рдЗрд▓реНрд╕ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕рдВрд╕реНрдереЗрдЪреНрдпрд╛ рдЖрдХрд╛рд░рд╛рдмрджреНрджрд▓ рд╕рд╛рд╡рдзрдЧрд┐рд░реА рдмрд╛рд│рдЧрд╛;
  • рд╕реНрдкрд╛рд░реНрдХрдордзреАрд▓ рд╡рд┐рднрд╛рдЬрдиреЗ рд╕рдВрддреБрд▓рд┐рдд рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ;
  • рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, 2,5 рджрд╢рд▓рдХреНрд╖ рд╡рд┐рднрд╛рдЬрдиреЗ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдХрдзреАрд╣реА рдкреНрд░рдпрддреНрди рдХрд░реВ рдирдХрд╛;
  • рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдЕрдЬреВрдирд╣реА рдХрдареАрдг рдЖрд╣реЗ, рдЬрд╕реЗ рд╕реНрдкрд╛рд░реНрдХ рд╕реЗрдЯ рдХрд░рдгреЗ;
  • рдХрдзреАрдХрдзреА рд╡рд┐рд╢реЗрд╖ рдбреЗрдЯрд╛рд╕рд╛рдареА рд╡рд┐рд╢реЗрд╖ рдЙрдкрд╛рдп рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддрд╛рдд;
  • рд╕реНрдкрд╛рд░реНрдХ рдПрдХрддреНрд░реАрдХрд░рдг рдЬрд▓рдж рдЖрд╣реЗ, рдкрд░рдВрддреБ рд╡рд┐рднрд╛рдЬрди рдХрд░рдгреЗ рдЕрджреНрдпрд╛рдк рдорд╣рд╛рдЧ рдЖрд╣реЗ;
  • рдЬреЗрд╡реНрд╣рд╛ рддреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдореВрд▓рднреВрдд рдЧреЛрд╖реНрдЯреА рд╢рд┐рдХрд╡рддреАрд▓ рддреЗрд╡реНрд╣рд╛ рдЭреЛрдкреВ рдирдХрд╛, рдХрджрд╛рдЪрд┐рдд 1980 рдЪреНрдпрд╛ рджрд╢рдХрд╛рдд рдХреЛрдгреАрддрд░реА рддреБрдордЪреА рд╕рдорд╕реНрдпрд╛ рдЖрдзреАрдЪ рд╕реЛрдбрд╡рд▓реА рдЕрд╕реЗрд▓;
  • gnu parallel - рд╣реА рдПрдХ рдЬрд╛рджреВрдЪреА рдЧреЛрд╖реНрдЯ рдЖрд╣реЗ, рдкреНрд░рддреНрдпреЗрдХрд╛рдиреЗ рддреА рд╡рд╛рдкрд░рд▓реА рдкрд╛рд╣рд┐рдЬреЗ;
  • рд╕реНрдкрд╛рд░реНрдХрд▓рд╛ рдЕрд╕рдВрдкреАрдбрд┐рдд рдбреЗрдЯрд╛ рдЖрд╡рдбрддреЛ рдЖрдгрд┐ рд╡рд┐рднрд╛рдЬрдиреЗ рдПрдХрддреНрд░ рдХрд░рдгреЗ рдЖрд╡рдбрдд рдирд╛рд╣реА;
  • рд╕рд╛рдзреНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдВрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рддрд╛рдирд╛ рд╕реНрдкрд╛рд░реНрдХрдордзреНрдпреЗ рдЦреВрдк рдУрд╡реНрд╣рд░рд╣реЗрдб рдЖрд╣реЗ;
  • AWK рдЪреНрдпрд╛ рд╕рд╣рдпреЛрдЧреА рдЕреЕрд░реЗ рдЕрддрд┐рд╢рдп рдХрд╛рд░реНрдпрдХреНрд╖рдо рдЖрд╣реЗрдд;
  • рддреБрдореНрд╣реА рд╕рдВрдкрд░реНрдХ рдХрд░реВ рд╢рдХрддрд╛ stdin ╨╕ stdout рдЖрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреВрди, рдЖрдгрд┐ рдореНрд╣рдгреВрди рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдордзреНрдпреЗ рд╡рд╛рдкрд░рд╛;
  • рд╕реНрдорд╛рд░реНрдЯ рдкрде рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдмрджреНрджрд▓ рдзрдиреНрдпрд╡рд╛рдж, S3 рдЕрдиреЗрдХ рдлрд╛рдпрд▓реАрдВрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реВ рд╢рдХрддреЗ;
  • рд╡реЗрд│ рд╡рд╛рдпрд╛ рдШрд╛рд▓рд╡рдгреНрдпрд╛рдЪреЗ рдореБрдЦреНрдп рдХрд╛рд░рдг рдореНрд╣рдгрдЬреЗ рд╡реЗрд│реЗрдЖрдзреАрдЪ рддреБрдордЪреА рд╕реНрдЯреЛрд░реЗрдЬ рдкрджреНрдзрдд рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХрд░рдгреЗ;
  • рдХрд╛рд░реНрдпреЗ рд╡реНрдпрдХреНрддрд┐рдЪрд▓рд┐рддрдкрдгреЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ рдирдХрд╛, рд╕рдВрдЧрдгрдХрд╛рд▓рд╛ рдХрд░реВ рджреНрдпрд╛;
  • рд╡рд╛рдкрд░рд╛рдЪреНрдпрд╛ рд╕реБрд▓рднрддреЗрд╕рд╛рдареА рдЖрдгрд┐ рд▓рд╡рдЪрд┐рдХрддреЗрд╕рд╛рдареА API рд╕реЛрдкреЗ рдЕрд╕рд╛рд╡реЗ;
  • рдЬрд░ рддреБрдордЪрд╛ рдбреЗрдЯрд╛ рдЪрд╛рдВрдЧрд▓рд╛ рддрдпрд╛рд░ рдЕрд╕реЗрд▓, рддрд░ рдХреЕрд╢рд┐рдВрдЧ рд╕реЛрдкреЗ рд╣реЛрдИрд▓!

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛