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 рдорд┐рд▓рд┐рдпрди SNPs рдордзреНрдпреЗ рдПрдЙрдЯрд╛рд╕рдБрдЧ рд╕рдореНрдмрджреНрдз рд╕рдмреИ рд░реЗрдХрд░реНрдбрд╣рд░реВ рдХрд╕рд░реА рд╕рдЬрд┐рд▓реИ, рдЫрд┐рдЯреЛ рд░ рд╕рд╕реНрддреЛ рд░реВрдкрдорд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рднрдиреЗрд░ рд╕рд┐рдХреНрдиреБрдкрд░реНтАНрдпреЛред

рдпреЛ рдХрд╕рд░реА рдирдЧрд░реНрдиреЗ

рдЙрдкрдпреБрдХреНрдд рдХреНрд▓рд┐рдЪ рдЙрджреНрдзреГрдд рдЧрд░реНрди:

рдо рд╣рдЬрд╛рд░ рдкрдЯрдХ рдЕрд╕рдлрд▓ рднрдЗрдирдБ, рдореИрд▓реЗ рднрд░реНрдЦрд░реИ рдкреНрд░рд╢реНрди-рдЕрдиреБрдХреВрд▓ рдврд╛рдБрдЪрд╛рдорд╛ рдбрд╛рдЯрд╛рдХреЛ рдЧреБрдЪреНрдЫрд╛ рдкрд╛рд░реНрд╕ рдЧрд░реНрдирдмрд╛рдЯ рдмрдЪреНрди рд╣рдЬрд╛рд░реМрдВ рддрд░рд┐рдХрд╛рд╣рд░реВ рдкрддреНрддрд╛ рд▓рдЧрд╛рдПред

рдкрд╣рд┐рд▓реЛ рдкреНрд░рдпрд╛рд╕

рдореИрд▓реЗ рдХреЗ рд╕рд┐рдХреЗрдХреЛ рдЫреБ: рдПрдХ рдкрдЯрдХрдорд╛ 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 рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдерд┐рдпреЛ ...

рдореИрд▓реЗ рдХреЗ рд╕рд┐рдХреЗрдХреЛ рдЫреБ: рддрдкрд╛рдИрдВрдХреЛ Parquet рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рдЖрдХрд╛рд░ рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдВрдЧрдардирд╕рдБрдЧ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреБрд╣реЛрд╕реНред

рдореИрд▓реЗ рдкрд╣рд┐рд▓реЗ рд╕рдмреИ TSV рд▓рд╛рдИ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реЗрд░ рд╕реНрдерд┐рддрд┐ рдареАрдХ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реЗрдВ рдкрд░реНрдХреЗрдЯ рдлрд╛рдЗрд▓рд╣рд░реВред рддрд┐рдиреАрд╣рд░реВ рдареВрд▓рд╛ рдбреЗрдЯрд╛ рд╕реЗрдЯрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЫрдиреН рдХрд┐рдирднрдиреЗ рддрд┐рдиреАрд╣рд░реВрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рд╕реНрддрдореНрднрдХреЛ рд░реВрдкрдорд╛ рднрдгреНрдбрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдЫ: рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрдореНрдн рдкрд╛рда рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд╡рд┐рдкрд░реАрдд, рдпрд╕рдХреЛ рдЖрдлреНрдиреИ рдореЗрдореЛрд░реА/рдбрд┐рд╕реНрдХ рдЦрдгреНрдбрдорд╛ рд╣реБрдиреНрдЫ, рдЬрд╕рдорд╛ рдкрдЩреНрдХреНрддрд┐рд╣рд░реВрдорд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрдореНрднрдХрд╛ рддрддреНрд╡рд╣рд░реВ рд╣реБрдиреНрдЫрдиреНред рд░ рдпрджрд┐ рддрдкрд╛рдЗрдБ рдХреЗрд╣рд┐ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рднрдиреЗ, рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рд╕реНрддрдореНрдн рдкрдвреНрдиреБрд╣реЛрд╕реНред рдердк рд░реВрдкрдорд╛, рдкреНрд░рддреНрдпреЗрдХ рдлрд╛рдЗрд▓рд▓реЗ рд╕реНрддрдореНрднрдорд╛ рдорд╛рдирд╣рд░реВрдХреЛ рджрд╛рдпрд░рд╛ рднрдгреНрдбрд╛рд░ рдЧрд░реНрджрдЫ, рддреНрдпрд╕реИрд▓реЗ рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдЦреЛрдЬреНрдиреБ рднрдПрдХреЛ рдорд╛рди рд╕реНрддрдореНрднрдХреЛ рджрд╛рдпрд░рд╛рдорд╛ рдЫреИрди рднрдиреЗ, рд╕реНрдкрд╛рд░реНрдХрд▓реЗ рд╕рдореНрдкреВрд░реНрдг рдлрд╛рдЗрд▓ рд╕реНрдХреНрдпрд╛рди рдЧрд░реНрди рд╕рдордп рдмрд░реНрдмрд╛рдж рдЧрд░реНрджреИрдиред

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

рдЪрд╛рдЦрд▓рд╛рдЧреНрджреЛ рдХреБрд░рд╛ рдХреЗ рдЫ рднрдиреЗ, Parquet рдХреЛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд (рд░ рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдПрдХреЛ) рдХрдореНрдкреНрд░реЗрд╕рди рдкреНрд░рдХрд╛рд░, рд╕реНрдиреНрдпрд╛рдкреА, рд╡рд┐рднрд╛рдЬрд┐рдд рдЧрд░реНрди рдпреЛрдЧреНрдп рдЫреИрдиред рддреНрдпрд╕рдХрд╛рд░рдг, рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрд╡рд╛рд╣рдХ рдкреВрд░реНрдг 3,5 GB рдбрд╛рдЯрд╛рд╕реЗрдЯ рдЕрдирдкреНрдпрд╛рдХ рдЧрд░реНрдиреЗ рд░ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреЗ рдХрд╛рд░реНрдпрдорд╛ рдЕрдбреНрдХрд┐рдПрдХреЛ рдерд┐рдпреЛред

AWK рд░ R рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ 25TB рдкрд╛рд░реНрд╕ рдЧрд░реНрджреИ

рд╕рдорд╕реНрдпрд╛ рдмреБрдЭреМрдВ

рдореИрд▓реЗ рдХреЗ рд╕рд┐рдХреЗрдХреЛ рдЫреБ: рдХреНрд░рдордмрджреНрдз рдЧрд░реНрди рдЧрд╛рд╣реНрд░реЛ рдЫ, рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рдпрджрд┐ рдбрд╛рдЯрд╛ рд╡рд┐рддрд░рдг рдЧрд░рд┐рдПрдХреЛ рдЫред

рдЕрдм рдореИрд▓реЗ рд╕рдорд╕реНрдпрд╛рдХреЛ рд╕рд╛рд░ рдмреБрдЭреЗрдХреЛ рдЬрд╕реНрддреЛ рд▓рд╛рдЧреНрдпреЛред рдорд▓рд╛рдИ рдХреЗрд╡рд▓ SNP рд╕реНрддрдореНрдн рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдорд╛рдиреНрдЫреЗ рджреНрд╡рд╛рд░рд╛ рд╣реЛрдЗрдиред рддреНрдпрд╕рдкрдЫрд┐ рдзреЗрд░реИ SNP рд╣рд░реВ рдЫреБрдЯреНрдЯреИ рдбрд╛рдЯрд╛ рдЦрдгреНрдбрдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдиреЗрдЫ, рд░ рддреНрдпрд╕рдкрдЫрд┐ Parquet рдХреЛ "рд╕реНрдорд╛рд░реНрдЯ" рдкреНрд░рдХрд╛рд░реНрдп "рдорд╛рди рджрд╛рдпрд░рд╛рдорд╛ рдЫ рднрдиреЗ рдорд╛рддреНрд░ рдЦреЛрд▓реНрдиреБрд╣реЛрд╕реН" рдпрд╕рдХреЛ рд╕рдмреИ рдорд╣рд┐рдорд╛рдорд╛ рджреЗрдЦрд╛рдЙрдиреЗрдЫред рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдЫрд░рд┐рдПрдХрд╛ рдЕрд░рдмреМрдВ рдкрдЩреНрдХреНрддрд┐рд╣рд░реВ рдорд╛рд░реНрдлрдд рдХреНрд░рдордмрджреНрдз рдЧрд░реНрди рдЧрд╛рд╣реНрд░реЛ рдХрд╛рдо рд╕рд╛рдмрд┐рдд рднрдпреЛред

AWS рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдкрдорд╛ "рдо рдПрдХ рд╡рд┐рдЪрд▓рд┐рдд рд╡рд┐рджреНрдпрд╛рд░реНрдереА рд╣реБрдБ" рдХрд╛рд░рдгрд▓реЗ рдЧрд░реНрджрд╛ рдлрд┐рд░реНрддрд╛ рдЬрд╛рд░реА рдЧрд░реНрди рдЪрд╛рд╣рдБрджреИрдиред рдореИрд▓реЗ Amazon Glue рдорд╛ рдХреНрд░рдордмрджреНрдз рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, рдпреЛ реи рджрд┐рди рдЪрд▓реНрдпреЛ рд░ рдХреНрд░реНрдпрд╛рд╕ рднрдпреЛред

рд╡рд┐рднрд╛рдЬрдирдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреЗ рд╣реЛ?

рдореИрд▓реЗ рдХреЗ рд╕рд┐рдХреЗрдХреЛ рдЫреБ: рд╕реНрдкрд╛рд░реНрдХрдорд╛ рд╡рд┐рднрд╛рдЬрдирд╣рд░реВ рд╕рдиреНрддреБрд▓рд┐рдд рд╣реБрдиреБрдкрд░реНрдЫред

рддреНрдпрд╕рдкрдЫрд┐ рдореИрд▓реЗ рдХреНрд░реЛрдореЛрдЬреЛрдорд╣рд░реВрдорд╛ рдбрд╛рдЯрд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрдиреЗ рд╡рд┐рдЪрд╛рд░ рд▓рд┐рдПрдБред рддреНрдпрд╣рд╛рдБ рддреА рдордзреНрдпреЗ 23 рдЫрдиреН (рд░ рдзреЗрд░реИ рдзреЗрд░реИ рдпрджрд┐ рддрдкрд╛рдЗрдБ рдЦрд╛рддрд╛ рдорд╛рдЗрдЯреЛрдХреЛрдиреНрдбреНрд░рд┐рдпрд▓ DNA рд░ рдЕрдирдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХреЛ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рд▓рд┐рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ)ред
рдпрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдбрд╛рдЯрд╛рд▓рд╛рдИ рд╕рд╛рдиреЛ рдЯреБрдХреНрд░рд╛рдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдЧреНрд▓реБ рд▓рд┐рдкрд┐рдорд╛ рд╕реНрдкрд╛рд░реНрдХ рдирд┐рд░реНрдпрд╛рдд рдкреНрд░рдХрд╛рд░реНрдпрдорд╛ рдХреЗрд╡рд▓ рдПрдЙрдЯрд╛ рд▓рд╛рдЗрди рдердкреНрдиреБрднрдпреЛ рднрдиреЗ partition_by = "chr", рддреНрдпрд╕рдкрдЫрд┐ рдбрд╛рдЯрд╛ рдмрд╛рд▓реНрдЯреА рдорд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реБрдиреБрдкрд░реНрдЫред

AWK рд░ R рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ 25TB рдкрд╛рд░реНрд╕ рдЧрд░реНрджреИ
рдЬреАрдиреЛрдордорд╛ рдХреНрд░реЛрдореЛрдЬреЛрдо рднрдирд┐рдиреЗ рдзреЗрд░реИ рдЯреБрдХреНрд░рд╛рд╣рд░реВ рд╣реБрдиреНрдЫрдиреНред

рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдпрд╕рд▓реЗ рдХрд╛рдо рдЧрд░реЗрдиред рдХреНрд░реЛрдореЛрдЬреЛрдорд╣рд░реВ рдлрд░рдХ-рдлрд░рдХ рд╕рд╛рдЗрдЬ рд╣реБрдиреНрдЫрдиреН, рдЬрд╕рдХреЛ рдЕрд░реНрде рдЬрд╛рдирдХрд╛рд░реАрдХреЛ рдлрд░рдХ рдорд╛рддреНрд░рд╛ рд╣реЛред рдпрд╕рдХреЛ рдорддрд▓рдм рдпреЛ рд╣реЛ рдХрд┐ рд╕реНрдкрд╛рд░реНрдХрд▓реЗ рдХрд╛рдорджрд╛рд░рд╣рд░реВрд▓рд╛рдИ рдкрдард╛рдПрдХреЛ рдХрд╛рд░реНрдп рд╕рдиреНрддреБрд▓рд┐рдд рдерд┐рдПрди рд░ рдмрд┐рд╕реНрддрд╛рд░реИ рдкреВрд░рд╛ рднрдпреЛ рдХрд┐рдирднрдиреЗ рдХреЗрд╣реА рдиреЛрдбрд╣рд░реВ рдЪрд╛рдБрдбреИ рд╕рдорд╛рдкреНрдд рднрдП рд░ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдерд┐рдПред рддрд░, рдХрд╛рдорд╣рд░реВ рдкреВрд░рд╛ рднрдП ред рддрд░ рдПрдХ SNP рдХреЛ рд▓рд╛рдЧреА рд╕реЛрдзреНрджрд╛, рдЕрд╕рдиреНрддреБрд▓рдирд▓реЗ рдлреЗрд░рд┐ рд╕рдорд╕реНрдпрд╛ рдирд┐рдореНрддреНрдпрд╛рдпреЛред рдареВрд▓рд╛ рдХреНрд░реЛрдореЛрдЬреЛрдорд╣рд░реВрдорд╛ SNP рд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрдиреЗ рд▓рд╛рдЧрдд (рдЬрд╣рд╛рдБ рд╣рд╛рдореА рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ) рдХреЗрд╡рд▓ 10 рдХреЛ рдХрд╛рд░рдХрд▓реЗ рдШрдЯреЗрдХреЛ рдЫред рдзреЗрд░реИ, рддрд░ рдкрд░реНрдпрд╛рдкреНрдд рдЫреИрдиред

рдХреЗ рд╣реБрдиреНрдЫ рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рдЕрдЭ рд╕рд╛рдиреЛ рднрд╛рдЧрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрдЫреМрдВ?

рдореИрд▓реЗ рдХреЗ рд╕рд┐рдХреЗрдХреЛ рдЫреБ: 2,5 рдорд┐рд▓рд┐рдпрди рд╡рд┐рднрд╛рдЬрдирд╣рд░реВ рдХрд╣рд┐рд▓реНрдпреИ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдирдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдореИрд▓реЗ рд╕рдмреИ рдмрд╛рд╣рд┐рд░ рдЬрд╛рдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗ рд░ рдкреНрд░рддреНрдпреЗрдХ SNP рд╡рд┐рднрд╛рдЬрди рдЧрд░реЗред рдпрд╕рд▓реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНтАНрдпреЛ рдХрд┐ рд╡рд┐рднрд╛рдЬрдирд╣рд░реВ рд╕рдорд╛рди рдЖрдХрд╛рд░рдХрд╛ рдерд┐рдПред рдпреЛ рдПрдХ рдЦрд░рд╛рдм рд╡рд┐рдЪрд╛рд░ рдерд┐рдпреЛред рдореИрд▓реЗ рдЧреНрд▓реБ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдВ рд░ рдПрдХ рдирд┐рд░реНрджреЛрд╖ рд░реЗрдЦрд╛ рдердкреЗ partition_by = 'snp'ред рдХрд╛рд░реНрдп рд╕реБрд░реБ рднрдпреЛ рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рдерд╛рд▓реНрдпреЛред рдПрдХ рджрд┐рди рдкрдЫрд┐ рдореИрд▓реЗ рдЬрд╛рдБрдЪ рдЧрд░реЗрдВ рд░ рджреЗрдЦреЗрдВ рдХрд┐ рддреНрдпрд╣рд╛рдБ рдЕрдЭреИ рдкрдирд┐ S3 рдорд╛ рдХреЗрд╣рд┐ рд▓реЗрдЦрд┐рдПрдХреЛ рдЫреИрди, рддреНрдпрд╕реИрд▓реЗ рдореИрд▓реЗ рдХрд╛рд░реНрдпрд▓рд╛рдИ рдорд╛рд░реЗрдВред рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ рдХрд┐ рдЧреНрд▓реБрд▓реЗ рдордзреНрдпрд╡рд░реНрддреА рдлрд╛рдЗрд▓рд╣рд░реВ 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, рдЖрджрд┐ред рддрд░ рд╕рдорд╕реНрдпрд╛ рдпреЛ рд╣реЛ рдХрд┐ SNP рд╣рд░реВ рдХреНрд░реЛрдореЛрдЬреЛрдорд╣рд░реВрдорд╛ рд╕рдорд╛рди рд░реВрдкрдорд╛ рд╡рд┐рддрд░рд┐рдд рдЫреИрдирдиреН, рддреНрдпрд╕реИрд▓реЗ рд╕рдореВрд╣ рдЖрдХрд╛рд░рд╣рд░реВ рдзреЗрд░реИ рдлрд░рдХ рд╣реБрдиреЗрдЫрдиреНред

AWK рд░ R рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ 25TB рдкрд╛рд░реНрд╕ рдЧрд░реНрджреИ

рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рдо рдХреЛрдЯрд┐рд╣рд░реВ (рд░реИрдВрдХ) рдорд╛ рдкрджрд╣рд░реВрдХреЛ рдмреНрд░реЗрдХрдбрд╛рдЙрдирдорд╛ рдЖрдПрдБред рдкрд╣рд┐рд▓реЗ рдиреИ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░рд┐рдПрдХреЛ рдбрд╛рдЯрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рдореИрд▓реЗ рдЕрджреНрд╡рд┐рддреАрдп SNPs, рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕реНрдерд┐рддрд┐ рд░ рдХреНрд░реЛрдореЛрд╕реЛрдорд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЕрдиреБрд░реЛрдз рдЧрд░реЗрдВред рддреНрдпрд╕рдкрдЫрд┐ рдореИрд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд░реЛрдореЛрдЬреЛрдо рднрд┐рддреНрд░ рдбреЗрдЯрд╛ рдХреНрд░рдордмрджреНрдз рдЧрд░реЗрдВ рд░ рджрд┐рдЗрдПрдХреЛ рд╕рд╛рдЗрдЬрдХреЛ рд╕рдореВрд╣ (рдмрд┐рди) рдорд╛ SNP рд╣рд░реВ рд╕рдЩреНрдХрд▓рди рдЧрд░реЗрдВред рдкреНрд░рддреНрдпреЗрдХ 1000 SNPs рднрдиреМрдВред рдпрд╕рд▓реЗ рдорд▓рд╛рдИ SNP-рджреЗрдЦрд┐-рд╕рдореВрд╣-рдкреНрд░рддрд┐-рдХреНрд░реЛрдореЛрдЬреЛрдо рд╕рдореНрдмрдиреНрдз рджрд┐рдпреЛред

рдЕрдиреНрддрдорд╛, рдореИрд▓реЗ 75 SNPs рдХреЛ рд╕рдореВрд╣ (рдмрд┐рди) рдмрдирд╛рдПрдХреЛ рдЫреБ, рдХрд╛рд░рдг рддрд▓ рд╡рд░реНрдгрди рдЧрд░рд┐рдиреЗрдЫред

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

AWK рд░ R рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ 25TB рдкрд╛рд░реНрд╕ рдЧрд░реНрджреИ
рдзреЗрд░реИ рд╕рд╛рдиреЛ рд░ рдЕрд╕рдорд╛рди, рдЕрджреНрднреБрдд!

рд╕реНрдерд╛рдиреАрдп рд╕реНрдкрд╛рд░реНрдХ рдкреНрд░рд╢реНрдирд╣рд░реВ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрджреИ

рдореИрд▓реЗ рдХреЗ рд╕рд┐рдХреЗрдХреЛ рдЫреБ: рд╕рд╛рдзрд╛рд░рдг рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрджрд╛ рд╕реНрдкрд╛рд░реНрдХрдХреЛ рдзреЗрд░реИ рдУрднрд░рд╣реЗрдб рд╣реБрдиреНрдЫред

рдЪрддреБрд░ рдврд╛рдБрдЪрд╛рдорд╛ рдбрд╛рдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реЗрд░, рдо рдЧрддрд┐ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди рд╕рдХреНрд╖рдо рдерд┐рдПрдБред рд╕реНрдерд╛рдиреАрдп рд╕реНрдкрд╛рд░реНрдХ рд╕рд░реНрднрд░ рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ R рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд░ рддреНрдпрд╕рдкрдЫрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ Parquet рд╕рдореВрд╣ рднрдгреНрдбрд╛рд░рдг (рдмрд┐рди) рдмрд╛рдЯ рд╕реНрдкрд╛рд░реНрдХ рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рд▓реЛрдб рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдореИрд▓реЗ рд╕рдмреИ рдбрд╛рдЯрд╛ рд▓реЛрдб рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реЗрдВ рддрд░ рд╡рд┐рднрд╛рдЬрди рдкрд╣рд┐рдЪрд╛рди рдЧрд░реНрди рд╕реНрдкрд╛рд░реНрдХрд▓рд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХрд┐рдиред

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 GB рднрдиреНрджрд╛ рдмрдвреА рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдЧрд░реЗ рдкрдирд┐ред

AWK рдорд╛ рдлрд░реНрдХрдиреБрд╣реЛрд╕реН

рдореИрд▓реЗ рдХреЗ рд╕рд┐рдХреЗрдХреЛ рдЫреБ: AWK рдорд╛ рд╕рд╣рдпреЛрдЧреА arrays рдзреЗрд░реИ рдХреБрд╢рд▓ рдЫрдиреНред

рдореИрд▓реЗ рдорд╣рд╕реБрд╕ рдЧрд░реЗрдВ рдХрд┐ рдо рдЙрдЪреНрдЪ рдЧрддрд┐ рд╣рд╛рд╕рд┐рд▓ рдЧрд░реНрди рд╕рдХреНрдЫреБред рдореИрд▓реЗ рддреНрдпреЛ рдЧрдЬрдмрдорд╛ рд╕рдореНрдЭреЗрдВ рдмреНрд░реБрд╕ рдмрд╛рд░реНрдиреЗрдЯ рджреНрд╡рд╛рд░рд╛ AWK рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореИрд▓реЗ рдПрдЙрдЯрд╛ рд╕реБрдиреНрджрд░ рд╕реБрд╡рд┐рдзрд╛рдХреЛ рдмрд╛рд░реЗрдорд╛ рдкрдвреЗрдВ "рд╕рд╣рдпреЛрдЧреА arrays" рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдкрдорд╛, рдпреА рдХреБрдЮреНрдЬреА-рдорд╛рди рдЬреЛрдбреАрд╣рд░реВ рд╣реБрдиреН, рдЬрд╕рд▓рд╛рдИ рдХреБрдиреИ рдХрд╛рд░рдгрд▓реЗ AWK рдорд╛ рдлрд░рдХ рд░реВрдкрдорд╛ рдмреЛрд▓рд╛рдЗрдПрдХреЛ рдерд┐рдпреЛ, рд░ рддреНрдпрд╕реИрд▓реЗ рдореИрд▓реЗ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдзреЗрд░реИ рд╕реЛрдЪрд┐рдиред рд░реЛрдорди рдЪреЗрдкрд▓реНрдпрд╛рдХрд╛ рд╕рдореНрдЭрдирд╛ рднрдпреЛ рдХрд┐ "рд╕рд╣рдпреЛрдЧреА arrays" рд╢рдмреНрдж "рдХреБрдЮреНрдЬреА-рдорд╛рди рдЬреЛрдбреА" рд╢рдмреНрдж рднрдиреНрджрд╛ рдзреЗрд░реИ рдкреБрд░рд╛рдиреЛ рдЫред рддрд┐рдореА рднрдП рдкрдирд┐ рдЧреБрдЧрд▓ рдПрдирдЧреНрд░рд╛рдордорд╛ рдХреБрдЮреНрдЬреА-рдорд╛рди рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН, рддрдкрд╛рдИрдВрд▓реЗ рддреНрдпрд╣рд╛рдБ рдпреЛ рд╢рдмреНрдж рджреЗрдЦреНрдиреБрд╣реБрдиреЗ рдЫреИрди, рддрд░ рддрдкрд╛рдИрдВрд▓реЗ рд╕рд╣рдпреЛрдЧреА arrays рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреБрд╣реБрдиреЗрдЫ! рдердк рд░реВрдкрдорд╛, "рдХреБрдЮреНрдЬреА-рдорд╛рди рдЬреЛрдбреА" рдкреНрд░рд╛рдп: рдбрд╛рдЯрд╛рдмреЗрд╕рд╣рд░реВрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╣реБрдиреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рдпрд╕рд▓рд╛рдИ рд╣реНрдпрд╛рд╢рдореНрдпрд╛рдкрд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реНрди рдзреЗрд░реИ рдЕрд░реНрде рд▓рд╛рдЧреНрдЫред рдореИрд▓реЗ рдорд╣рд╕реБрд╕ рдЧрд░реЗрдВ рдХрд┐ рдореИрд▓реЗ рдпреА рдПрд╕реЛрд╕рд┐рдПрдЯрд┐рдн рдПрд░реЗрд╣рд░реВ рдореЗрд░реЛ SNPs рд▓рд╛рдИ рдмрд┐рди рдЯреЗрдмрд▓ рд░ рдХрдЪреНрдЪрд╛ рдбрд╛рдЯрд╛рд╕рдБрдЧ 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 рд╕рдБрдЧрдХреЛ рдореЗрд░реЛ рдЕрдШрд┐рд▓реНрд▓реЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдмрд╛рдБрдХреА рд░рд╣реЗрдХрд╛ рдХреНрд░реЛрдореЛрдЬреЛрдорд╣рд░реВрдорд╛ рд░рд╣реЗрдХрд╛ рд╕рдмреИ рдХрдЪреНрдЪрд╛ рдбрд╛рдЯрд╛ рдлреЛрд▓реНрдбрд░рд╣рд░реВрдорд╛ рдЫрд░рд╛рдПрдХреЛ рд╣реБрдирд╛рд▓реЗ, рдЕрдм рдо рдПрдХ рдкрдЯрдХрдорд╛ рдПрдЙрдЯрд╛ рдХреНрд░реЛрдореЛрдЬреЛрдорд▓рд╛рдИ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди рд░ 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 R рд╕реНрдХреНрд░рд┐рдкреНрдЯрдмрд╛рдЯ, рд░ рддреНрдпрд╕реИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ Bash рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдпреЛ рд░реЗрдЦрд╛ рдпрд╛рдж рдЧрд░реНрдиреБрднрдПрдХреЛ рд╣реБрди рд╕рдХреНрдЫ: ...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, R рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рдбрд╛рдЯрд╛ рдлреНрд░реЗрдордорд╛ рд▓реЛрдб рд╣реБрдиреНрдЫ, рдЬреБрди рддреНрдпрд╕рдкрдЫрд┐ рдлрд╛рд░рдордорд╛ рд╣реБрдиреНрдЫ .rds- рдлрд╛рдЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ aws.s3 рд╕рд┐рдзреИ S3 рдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛред

RDS Parquet рдХреЛ рдЬреБрдирд┐рдпрд░ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╕реНрддреИ рд╣реЛ, рд╕реНрдкрд┐рдХрд░ рднрдгреНрдбрд╛рд░рдг рдХреЛ рдлреНрд░рд┐рд▓ рдмрд┐рдирд╛ред

рдмрд╛рд╕ рд▓рд┐рдкрд┐ рд╕рдорд╛рдкреНрдд рдЧрд░реЗрдкрдЫрд┐ рдореИрд▓реЗ рдПрдЙрдЯрд╛ рдмрдиреНрдбрд▓ рдкрд╛рдПрдБ .rdsS3 рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдлрд╛рдЗрд▓рд╣рд░реВ, рдЬрд╕рд▓реЗ рдорд▓рд╛рдИ рдХреБрд╢рд▓ рдХрдореНрдкреНрд░реЗрд╕рди рд░ рдирд┐рд░реНрдорд┐рдд рдкреНрд░рдХрд╛рд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдпреЛред

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

S3 рд╕реАрдорд╛рд╣рд░реВ

рдореИрд▓реЗ рдХреЗ рд╕рд┐рдХреЗрдХреЛ рдЫреБ: рд╕реНрдорд╛рд░реНрдЯ рдкрде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд▓рд╛рдЧрд┐ рдзрдиреНрдпрд╡рд╛рдж, S3 рд▓реЗ рдзреЗрд░реИ рдлрд╛рдЗрд▓рд╣рд░реВ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрди рд╕рдХреНрдЫред

рдо рдЪрд┐рдиреНрддрд┐рдд рдерд┐рдПрдБ рдХрд┐ S3 рд▓реЗ рдпрд╕рдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░рд┐рдПрдХрд╛ рдзреЗрд░реИ рдлрд╛рдЗрд▓рд╣рд░реВ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреЗрдЫред рдореИрд▓реЗ рдлрд╛рдЗрд▓ рдирд╛рдорд╣рд░реВрд▓рд╛рдИ рдЕрд░реНрдердкреВрд░реНрдг рдмрдирд╛рдЙрди рд╕рдХреНрдЫреБ, рддрд░ S3 рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдХрд╕рд░реА рдЦреЛрдЬреНрдЫ?

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

рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ рдХрд┐ S3 рд▓реЗ рд╣реНрдпрд╛рд╕ рддрд╛рд▓рд┐рдХрд╛ рд╡рд╛ рдХрд╛рдЧрдЬрд╛рдд-рдЖрдзрд╛рд░рд┐рдд рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреБрдЮреНрдЬреАрдХреЛ рд░реВрдкрдорд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╛рдЗрд▓рдХреЛ рдорд╛рд░реНрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрджрдЫред рдПрдЙрдЯрд╛ рдмрд╛рд▓реНрдЯреАрд▓рд╛рдИ рддрд╛рд▓рд┐рдХрд╛рдХреЛ рд░реВрдкрдорд╛ рд╕реЛрдЪреНрди рд╕рдХрд┐рдиреНрдЫ, рд░ рдлрд╛рдЗрд▓рд╣рд░реВрд▓рд╛рдИ рддреНрдпреЛ рддрд╛рд▓рд┐рдХрд╛рдорд╛ рд░реЗрдХрд░реНрдбрд╣рд░реВ рдорд╛рдиреНрди рд╕рдХрд┐рдиреНрдЫред

рдЕрдореЗрдЬрдирдорд╛ рдирд╛рдлрд╛ рдХрдорд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдЧрддрд┐ рд░ рджрдХреНрд╖рддрд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рднрдПрдХреЛрд▓реЗ, рдпреЛ рдХреБрдиреИ рдЖрд╢реНрдЪрд░реНрдпрдХреЛ рдХреБрд░рд╛ рд╣реЛрдЗрди рдХрд┐ рдпреЛ рдХреБрдЮреНрдЬреА-рдП-рдП-рдлрд╛рдЗрд▓-рдкрде рдкреНрд░рдгрд╛рд▓реАрд▓рд╛рдИ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬ рдЧрд░рд┐рдПрдХреЛ рдЫред рдореИрд▓реЗ рд╕рдиреНрддреБрд▓рди рдЦреЛрдЬреНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реЗ: рддрд╛рдХрд┐ рдореИрд▓реЗ рдзреЗрд░реИ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрдкрд░реНрджреИрди, рддрд░ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдЫрд┐рдЯреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдпреЛред рдпреЛ рд▓рдЧрднрдЧ 20 рд╣рдЬрд╛рд░ рдмрд┐рди рдлрд╛рдЗрд▓рд╣рд░реВ рдмрдирд╛рдЙрди рд╕рдмреИ рднрдиреНрджрд╛ рд░рд╛рдореНрд░реЛ рдЫ рдХрд┐ рдмрд╛рд╣рд┐рд░ рдЖрдпреЛред рдорд▓рд╛рдИ рд▓рд╛рдЧреНрдЫ рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрди рдЬрд╛рд░реА рд░рд╛рдЦреНрдпреМрдВ рднрдиреЗ, рд╣рд╛рдореАрд▓реЗ рдЧрддрд┐рдорд╛ рд╡реГрджреНрдзрд┐ рд╣рд╛рд╕рд┐рд▓ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдХреЗрд╡рд▓ рдбрд╛рдЯрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╢реЗрд╖ рдмрд╛рд▓реНрдЯреА рдмрдирд╛рдЙрдиреЗ, рдпрд╕рд░реА рд▓реБрдХрдЕрдк рддрд╛рд▓рд┐рдХрд╛рдХреЛ рдЖрдХрд╛рд░ рдШрдЯрд╛рдЙрдиреЗ)ред рддрд░ рдердк рдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдордп рд╡рд╛ рдкреИрд╕рд╛ рдерд┐рдПрдиред

рдХреНрд░рд╕ рдЕрдиреБрдХреВрд▓рддрд╛ рдмрд╛рд░реЗ рдХреЗ?

рдореИрд▓реЗ рдХреЗ рд╕рд┐рдХреЗрдВ: рд╕рдордп рдмрд░реНрдмрд╛рдж рдЧрд░реНрдиреБрдХреЛ рдирдореНрдмрд░ рдПрдХ рдХрд╛рд░рдг рднрдиреЗрдХреЛ рд╕рдордп рднрдиреНрджрд╛ рдкрд╣рд┐рд▓реЗ рдиреИ рддрдкрд╛рдИрдВрдХреЛ рднрдгреНрдбрд╛рд░рдг рд╡рд┐рдзрд┐рд▓рд╛рдИ рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрдиреБ рд╣реЛред

рдпрд╕ рдмрд┐рдиреНрджреБрдорд╛, рдпреЛ рдЖрдлреИрд▓рд╛рдИ рд╕реЛрдзреНрдиреБ рдзреЗрд░реИ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ: "рдХрд┐рди рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдлрд╛рдЗрд▓ рдврд╛рдБрдЪрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН?" рдХрд╛рд░рдг рд▓реЛрдбрд┐рдЩ рдЧрддрд┐рдорд╛ рдЫ (gzipped CSV рдлрд╛рдЗрд▓рд╣рд░реВ рд▓реЛрдб рд╣реБрди рен рдЧреБрдгрд╛ рдмрдвреА рд╕рдордп рд▓рд╛рдЧреНрдпреЛ) рд░ рд╣рд╛рдореНрд░реЛ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣рд╕рдБрдЧ рдЕрдиреБрдХреВрд▓рддрд╛ред рдпрджрд┐ R рд▓реЗ рд╕реНрдкрд╛рд░реНрдХ рд▓реЛрдб рдмрд┐рдирд╛ Parquet (рд╡рд╛ Arrow) рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рдЬрд┐рд▓реИ рд▓реЛрдб рдЧрд░реНрди рд╕рдХреНрдЫ рднрдиреЗ рдо рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдЧрд░реНрди рд╕рдХреНрдЫреБред рд╣рд╛рдореНрд░реЛ рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛рдорд╛ рд╕рдмреИрдЬрдирд╛рд▓реЗ рдЖрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рд░ рдпрджрд┐ рдореИрд▓реЗ рдбрд╛рдЯрд╛рд▓рд╛рдИ рдЕрд░реНрдХреЛ рдврд╛рдБрдЪрд╛рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рднрдиреЗ, рдорд╕рдБрдЧ рдЕрдЭреИ рдкрдирд┐ рдореВрд▓ рдкрд╛рда рдбрд╛рдЯрд╛ рдЫ, рддреНрдпрд╕реИрд▓реЗ рдо рдлреЗрд░рд┐ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЪрд▓рд╛рдЙрди рд╕рдХреНрдЫреБред

рдХрд╛рдордХреЛ рд╡рд┐рднрд╛рдЬрди

рдореИрд▓реЗ рдХреЗ рд╕рд┐рдХреЗрдХреЛ рдЫреБ: рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдХрд╛рдорд╣рд░реВ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдирдЧрд░реНрдиреБрд╣реЛрд╕реН, рдХрдореНрдкреНрдпреБрдЯрд░рд▓рд╛рдИ рдЧрд░реНрди рджрд┐рдиреБрд╣реЛрд╕реНред

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

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

рдкреНрдпрд╛рдХ рдЧрд░реМрдВ!

рдореИрд▓реЗ рдХреЗ рд╕рд┐рдХреЗрдХреЛ рдЫреБ: API рдкреНрд░рдпреЛрдЧрдХреЛ рд╕рд╣рдЬрддрд╛ рд░ рд▓рдЪрд┐рд▓реЛрдкрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рд░рд▓ рд╣реБрдиреБрдкрд░реНрдЫред

рдЕрдиреНрддрддрдГ рдореИрд▓реЗ рд╕рд╣реА рдард╛рдЙрдБ рд░ рдлрд╛рд░рдордорд╛ рдбрд╛рдЯрд╛ рдкрд╛рдПрдБред рдореЗрд░рд╛ рд╕рд╣рдХрд░реНрдореАрд╣рд░реВрд▓рд╛рдИ рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рдХреЗрд╕рдореНрдо рдбрд╛рдЯрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рд╕рд░рд▓ рдмрдирд╛рдЙрди рдмрд╛рдБрдХреА рд░рд╣реЗрдХреЛ рдерд┐рдпреЛред рдо рдЕрдиреБрд░реЛрдзрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг 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 
}

╨а╨╡╨╖╤Г╨╗╤М╤В╨░╤В╤Л

рдЕрдм рд╣рд╛рдореА (рд░ рдЧрдореНрднреАрд░рддрд╛рдХрд╛ рд╕рд╛рде рд╕реБрд░реБ рдЧрд░реЗрдХрд╛ рдЫреМрдВ) рдореЛрдбреЗрд▓рд╣рд░реВ рд░ рдкрд░рд┐рджреГрд╢реНрдпрд╣рд░реВ рдЪрд▓рд╛рдЙрди рд╕рдХреНрдЫреМрдВ рдЬреБрди рдкрд╣рд┐рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдкрд╣реБрдБрдЪ рдерд┐рдПрдиред рд╕рдмреИрднрдиреНрджрд╛ рд░рд╛рдореНрд░реЛ рдХреБрд░рд╛ рдпреЛ рд╣реЛ рдХрд┐ рдореЗрд░реЛ рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рд╕рд╣рдХрд░реНрдореАрд╣рд░реВрд▓реЗ рдХреБрдиреИ рдкрдирд┐ рдЬрдЯрд┐рд▓рддрд╛рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕реЛрдЪреНрдиреБ рдкрд░реНрджреИрдиред рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХрд╛рд░реНрдп рдЫ рдЬреБрди рдХрд╛рдо рдЧрд░реНрджрдЫред

рд░ рдпрджреНрдпрдкрд┐ рдкреНрдпрд╛рдХреЗрдЬрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╡рд┐рд╡рд░рдгрд╣рд░реВ рдЫреЛрдбреНрдЫ, рдореИрд▓реЗ рдбреЗрдЯрд╛ рдврд╛рдБрдЪрд╛рд▓рд╛рдИ рдкрд░реНрдпрд╛рдкреНрдд рд╕рд░рд▓ рдмрдирд╛рдЙрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реЗрдВ рдХрд┐ рдпрджрд┐ рдо рднреЛрд▓рд┐ рдЕрдЪрд╛рдирдХ рдЧрд╛рдпрдм рднрдПрдорд╛ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдпреЛ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рд╕рдХреНрдЫрдиреН ...

рдЧрддрд┐ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдкрдорд╛ рдмрдвреЗрдХреЛ рдЫред рд╣рд╛рдореА рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдкрдорд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЬреАрдиреЛрдо рдЯреБрдХреНрд░рд╛рд╣рд░реВ рд╕реНрдХреНрдпрд╛рди рдЧрд░реНрдЫреМрдВред рдкрд╣рд┐рд▓реЗ, рд╣рд╛рдореАрд▓реЗ рдпреЛ рдЧрд░реНрди рд╕рдХреЗрдиреМрдВ (рдпреЛ рдзреЗрд░реИ рдорд╣рдБрдЧреЛ рднрдпреЛ), рддрд░ рдЕрдм, рд╕рдореВрд╣ (рдмрд┐рди) рд╕рдВрд░рдЪрдирд╛ рд░ рдХреНрдпрд╛рд╕рд┐рдЩрдХреЛ рд▓рд╛рдЧрд┐ рдзрдиреНрдпрд╡рд╛рдж, рдПрдХ SNP рдХреЛ рд▓рд╛рдЧреА рдЕрдиреБрд░реЛрдзрд▓реЗ рдФрд╕рддрдорд╛ реж.рез рд╕реЗрдХреЗрдиреНрдб рднрдиреНрджрд╛ рдХрдо рд╕рдордп рд▓рд┐рдиреНрдЫ, рд░ рдбрд╛рдЯрд╛ рдЙрдкрдпреЛрдЧ рдпрддрд┐ рдЫред рдХрдо рдХрд┐ S0,1 рдХреЛ рд▓рд╛рдЧрдд рдореВрдВрдЧрдлрд▓реА рд╣реЛред

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

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

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

рдореИрд▓реЗ рдХреЗ рд╕рд┐рдХреЗрдВ:

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди