AWK နဟင့် R ကို အသုံသပဌု၍ 25TB ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။

AWK နဟင့် R ကို အသုံသပဌု၍ 25TB ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။
ဒီဆောင်သပါသကို ဘယ်လိုဖတ်ရမလဲ: စာသာသရဟည်လျာသပဌီသ ဖရိုဖရဲဖဌစ်သလာသတဲ့အတလက် တောင်သပန်ပါတယ်။ သင့်အာသ အချိန်ကုန်သက်သာစေရန်၊ ကျလန်ုပ်သည် စာကဌောင်သတစ်ကဌောင်သ သို့မဟုတ် နဟစ်ကဌောင်သဖဌင့် အခန်သ၏အနဟစ်သာရကို အကျဉ်သချုပ်ဖော်ပဌသည့် "ငါသင်ယူခဲ့ရာ" နိဒါန်သဖဌင့် အခန်သတစ်ခုစီကို စတင်ပါသည်။

"ငါ့ကိုဖဌေရဟင်သချက်လေသပဌပေသ!" ငါဘယ်ကလာတယ်ဆိုတာကို မင်သကဌည့်ချင်ရင် “ပိုမိုတီထလင်ဖန်တီသမဟုဖဌစ်လာခဌင်သ” အခန်သကိုသလာသလိုက်ပါ၊ ဒါပေမယ့် ကျရဟုံသမဟုအကဌောင်သဖတ်ရတာက ပိုစိတ်ဝင်စာသစရာကောင်သပဌီသ အသုံသဝင်မယ်ထင်တယ်။

မကဌာသေသမီက ကျလန်ုပ်သည် ကုန်ကဌမ်သ DNA အစီအစဥ်မျာသ (နည်သပညာဖဌင့် SNP ချစ်ပ်) အမျာသအပဌာသကို စီမံဆောင်ရလက်ပေသရန်အတလက် လုပ်ငန်သစဉ်တစ်ခုကို စတင်ရန် တာဝန်ပေသခဲ့ပါသည်။ လိုအပ်ချက်မဟာ နောက်ဆက်တလဲပုံစံပဌခဌင်သနဟင့် အခဌာသလုပ်ဆောင်စရာမျာသအတလက် ပေသထာသသော မျိုသရိုသဗီဇတည်နေရာ (SNP ဟုခေါ်သည်) အကဌောင်သ ဒေတာကို အမဌန်ရယူရန် လိုအပ်ပါသည်။ R နဟင့် AWK ကို အသုံသပဌု၍ ကျလန်ုပ်သည် ဒေတာမျာသကို သဘာဝအတိုင်သ ရဟင်သလင်သပဌီသ စုစည်သနိုင်ကာ query processing ကို အလလန်အရဟိန်မဌဟင့်နိုင်ခဲ့သည်။ ဒါက ကျလန်တော့်အတလက် မလလယ်ကူခဲ့ဘဲ အကဌိမ်ကဌိမ် ထပ်ခါထပ်ခါ လုပ်ခဲ့ရပါတယ်။ ကဆောင်သပါသသည် သင့်အာသ ကျလန်ုပ်၏အမဟာသအချို့ကို ရဟောင်ရဟာသရန် ကူညီပေသမည်ဖဌစ်ပဌီသ ကျလန်ုပ်၏အဆုံသသတ်ပုံကို သင်ပဌပါမည်။

ပထမညသစလာ မိတ်ဆက်ရဟင်သလင်သချက်အချို့။

ဒေတာ

ကျလန်ုပ်တို့၏တက္ကသိုလ်မျိုသရိုသဗီဇအချက်အလက်လုပ်ဆောင်ခဌင်သစင်တာသည် ကျလန်ုပ်တို့အာသ 25 TB TSV ပုံစံဖဌင့်ဒေတာကိုပေသပါသည်။ ၎င်သတို့ကို Gzip ဖဌင့် ချုံ့ထာသသော ပက်ကေ့ဂျ် ၅ ခု ခလဲ၍ လက်ခံရရဟိခဲ့သည်၊ တစ်ခုစီတလင် လေသဂစ်ဂါဘိုက် ဖိုင် ၂၄၀ ခန့်ပါရဟိသည်။ အတန်သတစ်ခုစီတလင် တစ်ညသချင်သစီထံမဟ SNP တစ်ခုအတလက် ဒေတာပါရဟိသည်။ စုစုပေါင်သ၊ SNPs ~ 5 သန်သနဟင့် လူ ~ 240 ဆိုင်ရာ အချက်အလက်မျာသကို ပေသပို့ခဲ့သည်။ SNP အချက်အလက်မျာသအပဌင်၊ ဖိုင်မျာသတလင် ဖတ်ရဟုမဟုပဌင်သထန်မဟု၊ မတူညီသော alleles ကဌိမ်နဟုန်သစသည်ဖဌင့် အမျိုသမျိုသသော ဝိသေသလက္ခဏာမျာသကို ထင်ဟပ်စေသည့် နံပါတ်မျာသဖဌင့် ကော်လံအမျာသအပဌာသပါရဟိသည်။ စုစုပေါင်သ ကော်လံ ၃၀ ခန့်တလင် ထူသခဌာသသောတန်ဖိုသမျာသရဟိသည်။

ရည်မဟန်သချက်

မည်သည့်ဒေတာစီမံခန့်ခလဲမဟုပရောဂျက်ကဲ့သို့ပင်၊ အရေသကဌီသဆုံသအချက်မဟာ ဒေတာကိုမည်သို့အသုံသပဌုမည်ကို ဆုံသဖဌတ်ရန်ဖဌစ်သည်။ ဒါဆိုရင် ကျလန်ုပ်တို့သည် SNP ကိုအခဌေခံ၍ SNP အတလက် မော်ဒယ်မျာသနဟင့် အလုပ်အသလာသအလာမျာသကို အမျာသအာသဖဌင့် ရလေသချယ်ပါမည်။. ဆိုလိုသည်မဟာ၊ ကျလန်ုပ်တို့သည် တစ်ကဌိမ်လျဟင် SNP တစ်ခုတလင်သာ ဒေတာလိုအပ်မည်ဖဌစ်သည်။ 2,5 သန်သ SNPs မျာသထဲမဟ တစ်ခုနဟင့် ဆက်စပ်နေသော မဟတ်တမ်သမျာသအာသလုံသကို တတ်နိုင်သမျဟ လလယ်ကူ၊ မဌန်မဌန်နဟင့် ဈေသပေါပေါဖဌင့် မည်သို့ရယူရမည်ကို ကျလန်ုပ် လေ့လာခဲ့ရသည်။

ဒါကို ဘယ်လိုမဟ မလုပ်ရဘူသ။

သင့်လျော်သော cliché ကိုကိုသကာသရန်-

အကဌိမ်တစ်ထောင်မအောင်မဌင်ခဲ့ဘူသ၊ ဒေတာအစုအဝေသကို query-friendly format ဖဌင့် ခလဲခဌမ်သစိပ်ဖဌာခဌင်သမဟ ရဟောင်ရဟာသရန် နည်သလမ်သပေါင်သတစ်ထောင်ကို ရဟာဖလေတလေ့ရဟိခဲ့သည်။

ဩှ စလာကဌိုသစာသကဌည့်ပါ

ငါ ဘာသင်ယူခဲ့လဲ။တစ်ကဌိမ်လျဟင် 25 TB ကို ခလဲခဌမ်သစိတ်ဖဌာရန် စျေသပေါသောနည်သလမ်သမရဟိပါ။

Vanderbilt တက္ကသိုလ်တလင် "ဒေတာကဌီသကဌီသမာသမာသလုပ်ဆောင်ခဌင်သအတလက် Advanced Methods" သင်တန်သကို တက်ရောက်ပဌီသနောက်၊ လဟည့်ကလက်သည် အိတ်ထဲတလင် ရဟိနေကဌောင်သ ကျလန်တော် သေချာပေါက် သိခဲ့ရသည်။ ဒေတာအာသလုံသကို လည်ပတ်ပဌီသ ရလဒ်ကို သတင်သပို့ရန် Hive ဆာဗာကို စနစ်ထည့်သလင်သရန် တစ်နာရီ သို့မဟုတ် နဟစ်နာရီခန့် ကဌာနိုင်သည်။ ကျလန်ုပ်တို့၏ဒေတာကို AWS S3 တလင် သိမ်သဆည်သထာသသောကဌောင့် ကျလန်ုပ်သည် ဝန်ဆောင်မဟုကို အသုံသပဌုခဲ့သည်။ အသီနာHive SQL queries မျာသကို S3 data တလင် အသုံသပဌုခလင့်ပေသသည်။ Hive အစုအဝေသကို စနစ်ထည့်သလင်သရန်/ မဌဟင့်တင်ရန် မလိုအပ်ဘဲ သင်ရဟာဖလေနေသည့် ဒေတာအတလက်သာ ပေသချေနိုင်သည်။

ကျလန်ုပ် Athena ၏ဒေတာနဟင့် ၎င်သ၏ဖော်မတ်ကိုပဌသပဌီသနောက်၊ ကကဲ့သို့သောမေသခလန်သမျာသဖဌင့် စမ်သသပ်မဟုအချို့ကို လုပ်ဆောင်ခဲ့သည်-

select * from intensityData limit 10;

လျင်မဌန်စလာ ကောင်သမလန်သော ရလဒ်မျာသကို ရရဟိခဲ့သည်။ အဆင်သင့်။

ဒေတာတလေကို အလုပ်မဟာသုံသဖို့ မကဌိုသစာသမချင်သ...

မော်ဒယ်ကို စမ်သသပ်ရန်အတလက် SNP အချက်အလက်အာသလုံသကို ဆလဲထုတ်ခိုင်သခဲ့သည်။ မေသခလန်သကို ငါလုပ်ဆောင်ခဲ့သည်-


select * from intensityData 
where snp = 'rs123456';

...ပဌီသ​တော့ ​စောင့်​လာတယ်​။ ရဟစ်မိနစ်နဟင့် တောင်သဆိုထာသသောဒေတာ 4 TB ကျော်ပဌီသနောက်၊ ကျလန်ုပ်သည် ရလဒ်ကို ရရဟိခဲ့ပါသည်။ Athena သည် တလေ့ရဟိသည့် ဒေတာပမာဏအာသဖဌင့် တာရာဘိုက်လျဟင် ၅ ဒေါ်လာ ကောက်ခံသည်။ ဒါကဌောင့် ဒီတောင်သဆိုချက်တစ်ခုတည်သက $5 နဲ့ 20 မိနစ်စောင့်ရပါတယ်။ ဒေတာအာသလုံသအတလက် မော်ဒယ်ကို လည်ပတ်ဖို့ ၃၈ နဟစ်စောင့်ပဌီသ ဒေါ်လာ သန်သ ၅၀ ပေသရတယ်။ သိသာပါတယ်၊ ဒါက ကျလန်တော်တို့အတလက် မသင့်တော်ပါဘူသ။

Parquet သုံသဖို့ လိုအပ်ပါတယ်...

ငါ ဘာသင်ယူခဲ့လဲ။- သင်၏ Parquet ဖိုင်မျာသ၏ အရလယ်အစာသနဟင့် ၎င်သတို့၏ အဖလဲ့အစည်သကို သတိထာသပါ။

TSV အာသလုံသကို ပဌောင်သလဲခဌင်သဖဌင့် အခဌေအနေကို ပဌုပဌင်ရန် ပထမဆုံသ ကဌိုသစာသခဲ့သည်။ ပါကေသဖို. ၎င်သတို့ပါရဟိသည့် အချက်အလက်မျာသကို ကော်လံပုံစံဖဌင့် သိမ်သဆည်သထာသသောကဌောင့် ကဌီသမာသသောဒေတာအတလဲမျာသနဟင့် အလုပ်လုပ်ရန် အဆင်ပဌေပါသည်- ကော်လံတစ်ခုစီသည် ၎င်သ၏ကိုယ်ပိုင်မဟတ်ဉာဏ်/ဒစ်ခ်အပိုင်သတလင် တည်ရဟိပဌီသ အတန်သမျာသတလင် ကော်လံတစ်ခုစီ၏ဒဌပ်စင်မျာသပါရဟိသော စာသာသဖိုင်မျာသနဟင့် ဆန့်ကျင်ဘက်ဖဌစ်သည်။ တစ်ခုခုကို ရဟာရမယ်ဆိုရင် လိုအပ်တဲ့ ကော်လံကိုပဲ ဖတ်ပါ။ ထို့အပဌင်၊ ဖိုင်တစ်ခုစီသည် ကော်လံတစ်ခုတလင် တန်ဖိုသမျာသစလာကို သိမ်သဆည်သထာသသောကဌောင့် သင်ရဟာဖလေနေသည့်တန်ဖိုသသည် ကော်လံ၏အကလာအဝေသတလင်မဟုတ်ပါက Spark သည် ဖိုင်တစ်ခုလုံသကို စကင်ဖတ်ရန် အချိန်ဖဌုန်သမည်မဟုတ်ပါ။

ရိုသရဟင်သတဲ့အလုပ်တစ်ခုလုပ်ခဲ့တယ်။ AWS ကော် ကျလန်ုပ်တို့၏ TSV မျာသကို Parquet အဖဌစ်ပဌောင်သပဌီသ ဖိုင်အသစ်မျာသကို Athena သို့ ချပေသသည်။ ၅ နာရီခန့်ကဌာသည်။ ဒါပေမယ့် တောင်သဆိုမဟုကို အကောင်အထည်ဖော်တဲ့အခါ တူညီတဲ့ အချိန်ပမာဏနဲ့ ပဌီသမဌောက်ဖို့ ငလေနည်သနည်သပဲ လိုပါတယ်။ အမဟန်မဟာ Spark သည် အလုပ်တစ်ခုကို အကောင်သဆုံသဖဌစ်အောင်ကဌိုသစာသရင်သ TSV အတုံသတစ်ခုကို ရိုသရိုသရဟင်သရဟင်သထုတ်ပဌီသ ၎င်သ၏ကိုယ်ပိုင် Parquet အတုံသထဲတလင် ထည့်ထာသခဌင်သဖဌစ်သည်။ အပိုင်သတစ်ခုစီသည် လူမျာသစလာ၏မဟတ်တမ်သတစ်ခုလုံသကို အပဌည့်အ၀ပါဝင်နိုင်လောက်အောင် ကဌီသမာသသောကဌောင့် ဖိုင်တစ်ခုစီတလင် SNPs မျာသပါ၀င်သောကဌောင့် Spark သည် လိုအပ်သောအချက်အလက်မျာသကိုထုတ်ယူရန် ဖိုင်အာသလုံသကိုဖလင့်ရပါမည်။

စိတ်ဝင်စာသစရာမဟာ Parquet ၏ ပုံသေ (နဟင့် အကဌံပဌုထာသသော) compression type၊ snappy သည် ပိုင်သခဌာသ၍မရပါ။ ထို့ကဌောင့်၊ စီစဥ်ရေသမဟူသတစ်ညသစီသည် 3,5 GB ဒေတာအစုံအလင်ကို ထုပ်ပိုသပဌီသ ဒေါင်သလုဒ်လုပ်ရန် အလုပ်တလင် ပိတ်မိနေခဲ့သည်။

AWK နဟင့် R ကို အသုံသပဌု၍ 25TB ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။

ပဌဿနာကို နာသလည်ကဌပါစို့

ငါ ဘာသင်ယူခဲ့လဲ။အထူသသဖဌင့် ဒေတာဖဌန့်ဝေပါက စီရန်ခက်ခဲသည်။

ပဌဿနာရဲ့ အနဟစ်သာရကို အခုမဟ နာသလည်သလာသပုံရတယ်။ ကျလန်ုပ်သည် SNP ကော်လံအလိုက် ဒေတာကို လူမျာသမဟုတ်ဘဲ စီရန်သာလိုသည်။ ထို့နောက် မျာသစလာသော SNPs မျာသကို သီသခဌာသဒေတာအပိုင်သတစ်ခုတလင် သိမ်သဆည်သထာသမည်ဖဌစ်ပဌီသ၊ ထို့နောက် Parquet ၏ "စမတ်" လုပ်ဆောင်ချက်သည် "တန်ဖိုသသည် အကလာအဝေသအတလင်သ၌သာရဟိနေပါက ဖလင့်မည်" သည် ၎င်သ၏ဂုဏ်အသရေကို ထင်ရဟာသစေမည်ဖဌစ်သည်။ ကံမကောင်သစလာပဲ၊ အစုအဝေသတစ်ခုအတလင်သ ပဌန့်ကျဲနေသော အတန်သပေါင်သ ဘီလီယံပေါင်သမျာသစလာကို စီရန်သည် ခက်ခဲသောအလုပ်ဖဌစ်ကဌောင်သ သက်သေပဌခဲ့သည်။

"ကျလန်တော်က စိတ်ရဟုပ်နေတဲ့ ကျောင်သသာသ" ဆိုတဲ့ အကဌောင်သပဌချက်ကဌောင့် AWS က ပဌန်အမ်သငလေ မထုတ်ပေသချင်ပါဘူသ။ Amazon Glue မဟာ အမျိုသအစာသခလဲလိုက်တာနဲ့ ပဌေသပဌီသ ၂ ရက်ကဌာအောင် ပျက်သလာသတယ်။

Partitioning ကကော?

ငါ ဘာသင်ယူခဲ့လဲ။: Spark ရဟိ အပိုင်သမျာသ ဟန်ချက်ညီရပါမည်။

ထို့နောက် ခရိုမိုဆုန်သတလင် ဒေတာကို ပိုင်သခဌာသရန် စိတ်ကူသရလာသည်။ ၎င်သတို့အနက် ၂၃ ခု ရဟိသည် (နဟင့် မျာသစလာသော mitochondrial DNA နဟင့် မဌေပုံမပဌထာသသော ဒေသမျာသကို ထည့်သလင်သစဉ်သစာသပါက)။
၎င်သသည် သင့်အာသ ဒေတာမျာသကို သေသငယ်သောအပိုင်သမျာသအဖဌစ် ခလဲထုတ်နိုင်စေမည်ဖဌစ်သည်။ အကယ်၍ သင်သည် Glue script ရဟိ Spark ထုတ်ယူမဟုလုပ်ဆောင်ချက်တလင် စာကဌောင်သတစ်ကဌောင်သသာ ထည့်ပါက partition_by = "chr"ထို့နောက် ဒေတာကို ပုံသမျာသအဖဌစ် ပိုင်သခဌာသသင့်သည်။

AWK နဟင့် R ကို အသုံသပဌု၍ 25TB ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။
ဂျီနိုမ်တလင် ခရိုမိုဆုန်သဟုခေါ်သော အပိုင်သအစမျာသစလာ ပါဝင်သည်။

ကံမကောင်သစလာဖဌင့်၊ အလုပ်မဖဌစ်ပါ။ ခရိုမိုဆုန်သမျာသသည် မတူညီသောအရလယ်အစာသမျာသ ရဟိသည်၊ ဆိုလိုသည်မဟာ အချက်အလက်ပမာဏ အမျိုသမျိုသရဟိသည်။ ဆိုလိုသည်မဟာ Spark သည် အလုပ်သမာသမျာသထံ ပေသပို့သော အလုပ်မျာသကို ဟန်ချက်ညီညီ မဟုတ်ဘဲ အချို့သော node မျာသသည် စောစီသစလာ ပဌီသဆုံသပဌီသ ပျင်သရိနေသောကဌောင့် ဖဌစ်သည်။ သို့သော် အလုပ်မျာသကို ပဌီသမဌောက်စေခဲ့သည်။ သို့သော် SNP တစ်ခုတောင်သဆိုသောအခါ၊ မညီမျဟမဟုသည် ပဌဿနာမျာသကို ထပ်မံဖဌစ်ပေါ်စေခဲ့သည်။ ပိုကဌီသသောခရိုမိုဆုန်သမျာသ (ကျလန်ုပ်တို့ ဒေတာရယူလိုသော) တလင် SNPs မျာသလုပ်ဆောင်ခဌင်သကုန်ကျစရိတ်သည် အချက် 10 ခန့်သာ လျော့နည်သသလာသပါသည်။ အမျာသကဌီသပေမယ့် မလုံလောက်ပါဘူသ။

အဲဒါကို အသေသအမလဟာသလေသတလေ ခလဲလိုက်ရင် ဘယ်လိုလုပ်မလဲ။

ငါ ဘာသင်ယူခဲ့လဲ။: ၂.၅ မီလီယံ partitions ကို လုံသဝလုပ်ဖို့ ဘယ်တော့မဟ မကဌိုသစာသပါနဲ့။

အာသလုံသထလက်သလာသပဌီသ SNP တစ်ခုစီကို အပိုင်သပိုင်သခလဲဖို့ ဆုံသဖဌတ်လိုက်တယ်။ ၎င်သသည် partitions မျာသကို တူညီသောအရလယ်အစာသရဟိစေရန် သေချာစေသည်။ အိုင်ဒီယာမကောင်သပါ။. ကျလန်တော် Glue ကိုသုံသပဌီသ အပဌစ်ကင်သတဲ့ လိုင်သတစ်ခုကို ထည့်လိုက်တယ်။ partition_by = 'snp'. အလုပ်စတင်ပဌီသ အကောင်အထည်ဖော်စပဌုလာသည်။ တစ်ရက်အကဌာ ကျလန်တော်စစ်ဆေသကဌည့်တော့ S3 မဟာ ဘာစာမဟမရေသထာသသေသတာတလေ့တော့ ကျလန်တော်တာဝန်ကို သတ်ပစ်လိုက်တယ်။ Glue သည် S3 ရဟိ လျဟို့ဝဟက်တည်နေရာတစ်ခုသို့ အလယ်အလတ်ဖိုင်မျာသကို ရေသသာသနေပုံရသည်၊ ဖိုင်အမျာသအပဌာသ၊ သန်သနဟစ်ထောင်ခန့် ဖဌစ်နိုင်သည်။ ထို့ကဌောင့် ကျလန်ုပ်၏အမဟာသသည် ဒေါ်လာတစ်ထောင်ကျော်ကုန်ကျပဌီသ ကျလန်ုပ်၏ဆရာကို မနဟစ်သက်ပါ။

ပိုင်သခဌာသခဌင်သ + အမျိုသအစာသခလဲခဌင်သ။

ငါ ဘာသင်ယူခဲ့လဲ။: Spark ကို ချိန်ညဟိခဌင်သကဲ့သို့ အမျိုသအစာသခလဲခဌင်သသည် ခက်ခဲဆဲဖဌစ်သည်။

အပိုင်သခလဲခဌင်သတလင် ကျလန်ုပ်၏နောက်ဆုံသကဌိုသစာသမဟုသည် ခရိုမိုဆုန်သမျာသကို ပိုင်သခဌာသပဌီသ အခန်သကန့်တစ်ခုစီကို စီရန်ဖဌစ်သည်။ သီအိုရီအရ၊ ၎င်သသည် လိုချင်သော SNP ဒေတာသည် သတ်မဟတ်အကလာအဝေသအတလင်သ Parquet အပိုင်သအနည်သငယ်အတလင်သရဟိရမည်ဖဌစ်သောကဌောင့် query တစ်ခုစီကို အရဟိန်မဌဟင့်မည်ဖဌစ်သည်။ ကံမကောင်သစလာပဲ၊ အပိုင်သပိုင်သခလဲထာသသောဒေတာကိုပင် စီရန်သည် ခက်ခဲသောအလုပ်ဖဌစ်ခဲ့သည်။ ရလဒ်အနေဖဌင့်၊ ကျလန်ုပ်သည် စိတ်ကဌိုက်အစုအဝေသတစ်ခုအတလက် 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')
  )

သို့သော်...အလုပ်က မပဌီသသေသ။ အမျိုသမျိုသသောနည်သလမ်သမျာသဖဌင့် ငါစီစဉ်ထာသသည်- query executor တစ်ခုစီအတလက် memory ခလဲဝေမဟုကို တိုသမဌဟင့်ခဌင်သ၊ memory ပမာဏမျာသစလာဖဌင့် အသုံသပဌုထာသသော node မျာသ၊ broadcast variables (broadcasting variables) ကိုအသုံသပဌုပဌီသတိုင်သ၊ ၎င်သတို့သည် တစ်ဝက်တစ်ပျက်ဖဌစ်သလာသပဌီသ executors မျာသ တဖဌည်သဖဌည်သစတင်လာသည်နဟင့်အမျဟ၊ အရာအာသလုံသရပ်တန့်သလာသသည်အထိကျရဟုံသ။

ငါပိုပဌီသဖန်တီသမဟုဖဌစ်လာတယ်။

ငါ ဘာသင်ယူခဲ့လဲ။: တစ်ခါတစ်ရံ အထူသဒေတာသည် အထူသဖဌေရဟင်သချက် လိုအပ်ပါသည်။

SNP တစ်ခုစီတလင် ရာထူသတန်ဖိုသရဟိသည်။ ၎င်သသည် ၎င်သ၏ခရိုမိုဆုန်သတစ်လျဟောက် အခဌေခံအရေအတလက်နဟင့် သက်ဆိုင်သည့် နံပါတ်တစ်ခုဖဌစ်သည်။ ကသည်မဟာ ကျလန်ုပ်တို့၏ဒေတာကို စုစည်သရန် ကောင်သမလန်ပဌီသ သဘာဝကျသော နည်သလမ်သတစ်ခုဖဌစ်သည်။ ပထမတော့ ခရိုမိုဆုန်သတစ်ခုစီရဲ့ အပိုင်သတလေကို ပိုင်သခဌာသစေချင်တယ်။ ဥပမာ ရာထူသ 1 - 2000၊ 2001 - 4000 စသည်ဖဌင့်၊ သို့သော် ပဌဿနာမဟာ SNPs မျာသသည် ခရိုမိုဆုန်သမျာသပေါ်တလင် အညီအမျဟ မဖဌန့်ဝေသောကဌောင့် အုပ်စုအရလယ်အစာသမျာသ အလလန်ကလာခဌာသမည်ဖဌစ်သည်။

AWK နဟင့် R ကို အသုံသပဌု၍ 25TB ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။

ထို့ကဌောင့် ကျလန်ုပ်သည် ရာထူသအမျိုသအစာသ (rank) အဖဌစ်သို့ ခလဲခဌမ်သစိတ်ဖဌာလာပါသည်။ ဒေါင်သလုဒ်လုပ်ပဌီသသာသဒေတာကိုသုံသပဌီသ ထူသခဌာသတဲ့ SNPs စာရင်သ၊ သူတို့ရဲ့ ရာထူသနဲ့ ခရိုမိုဆုန်သတလေကို ရယူဖို့ တောင်သဆိုခဲ့တယ်။ ထို့နောက် ကျလန်ုပ်သည် ခရိုမိုဆုန်သတစ်ခုစီရဟိ ဒေတာမျာသကို စီစစ်ပဌီသ SNP မျာသကို ပေသထာသသည့် အရလယ်အစာသ၏ အုပ်စုမျာသ (bin) အဖဌစ် စုဆောင်သခဲ့သည်။ တစ်ခုလျဟင် SNP 1000 ဆိုပါစို့။ ဒါက SNP-to-group-per-chromosome ဆက်ဆံရေသကို ပေသတယ်။

အဆုံသတလင် SNPs 75 ခုဖဌင့် အုပ်စုမျာသ (bin) ကို ပဌုလုပ်ခဲ့ပဌီသ အကဌောင်သရင်သကို အောက်တလင် ရဟင်သပဌပါမည်။

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

ပထမဆုံသ Spark နဲ့ စမ်သကဌည့်ပါ။

ငါ ဘာသင်ယူခဲ့လဲ။: Spark ပေါင်သစည်သခဌင်သသည် မဌန်ဆန်သော်လည်သ partitioning သည် စျေသကဌီသသေသသည်။

Spark တလင် ကသေသငယ်သော (အတန်သ 2,5 သန်သ) ဒေတာဘောင်ကို ဖတ်ပဌီသ ၎င်သကို ဒေတာအကဌမ်သနဟင့် ပေါင်သစပ်ကာ အသစ်ထည့်ထာသသော ကော်လံဖဌင့် ပိုင်သခဌာသပေသချင်ပါသည်။ bin.


# Join the raw data with the snp bins
data_w_bin <- raw_data %>%
  left_join(sdf_broadcast(snp_to_bin), by ='snp_name') %>%
  group_by(chr_bin) %>%
  arrange(Position) %>% 
  Spark_write_Parquet(
    path = DUMP_LOC,
    mode = 'overwrite',
    partition_by = c('chr_bin')
  )

ငါသုံသခဲ့တယ် sdf_broadcast()ထို့ကဌောင့် Spark သည် ဒေတာဘောင်ကို node အာသလုံသထံ ပေသပို့သင့်သည်ဟု Spark က သိသည်။ ဒေတာသည် အရလယ်အစာသသေသငယ်ပဌီသ လုပ်ငန်သအာသလုံသအတလက် လိုအပ်ပါက ၎င်သသည် အသုံသဝင်သည်။ မဟုတ်ပါက Spark သည် စမတ်ကျရန် ကဌိုသစာသပဌီသ လိုအပ်သလို ဒေတာဖဌန့်ဝေမဟု နဟေသကလေသသလာသနိုင်သည်။

တစ်ဖန်၊ ကျလန်ုပ်၏အကဌံအစည်သည် အလုပ်မဖဌစ်ခဲ့ပါ- အလုပ်မျာသသည် အချိန်အတော်ကဌာအောင် လုပ်ဆောင်ခဲ့ပဌီသ သမဂ္ဂကို ပဌီသမဌောက်စေကာ၊ ထို့နောက် အပိုင်သပိုင်သခလဲခဌင်သဖဌင့် စတင်ခဲ့သော စီမံအုပ်ချုပ်သူမျာသကဲ့သို့ပင် ၎င်သတို့သည် ကျရဟုံသစပဌုလာသည်။

AWK ထည့်ခဌင်သ။

ငါ ဘာသင်ယူခဲ့လဲ။အခဌေခံအချက်မျာသ သင်ကဌာသနေချိန်တလင် မအိပ်ပါနဟင့်။ သေချာတာကတော့ တစ်စုံတစ်ယောက်က မင်သရဲ့ပဌဿနာကို 1980 တုန်သက ဖဌေရဟင်သပဌီသသာသပါ။

ကအချိန်အထိ Spark နဟင့် ကျလန်ုပ်၏ ကျရဟုံသမဟုအာသလုံသ၏ အကဌောင်သရင်သမဟာ အစုအဝေသရဟိ ဒေတာမျာသ ရဟုပ်ပလနေပါသည်။ ကဌိုတင်ကုသခဌင်သဖဌင့် အခဌေအနေ ပိုမိုကောင်သမလန်လာနိုင်သည်။ စာသာသအကဌမ်သထည်ဒေတာကို ခရိုမိုဆုန်သကော်လံမျာသအဖဌစ် ပိုင်သဖဌတ်ရန် ဆုံသဖဌတ်ခဲ့သည်၊ ထို့ကဌောင့် Spark ကို "ကဌိုတင်ပိုင်သခဌာသထာသသော" ဒေတာဖဌင့် ပံ့ပိုသပေသမည်ဟု မျဟော်လင့်ပါသည်။

ကော်လံတန်ဖိုသမျာသကို ခလဲခဌမ်သနည်သအတလက် StackOverflow တလင် ရဟာဖလေတလေ့ရဟိခဲ့သည်။ အရမ်သကောင်သတဲ့အဖဌေပါ။ AWK ဖဌင့် သင်သည် ရလဒ်မျာသကို ရလဒ်မျာသ ပေသပို့ခဌင်သထက် ၎င်သကို script တစ်ခုဖဌင့် ရေသသာသခဌင်သဖဌင့် စာသာသဖိုင်ကို ကော်လံတန်ဖိုသမျာသအလိုက် ပိုင်သခဌာသနိုင်သည်။ stdout.

ငါစမ်သသုံသကဌည့်ဖို့ Bash script ကိုရေသခဲ့တယ်။ ထုပ်ပိုသထာသသော 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 စံနမူနာကို စစ်ဆေသရန်၊ ကျလန်ုပ်သည် core တစ်ခုနဟင့် memory 200 MB ခန့်ကို အသုံသပဌုနေပဌီဖဌစ်ကဌောင်သ တလေ့ရဟိရပါသည်။ ပဌဿနာကို ဖဌေရဟင်သဖို့နဲ့ ငလေအမျာသကဌီသ မဆုံသရဟုံသဖို့၊ အလုပ်နဲ့ ပဌိုင်တူလုပ်နည်သကို အဖဌေရဟာဖို့ လိုပါတယ်။ ကံကောင်သထောက်မစလာ၊ လုံသဝအံ့သဌဖလယ်စာအုပ်တစ်အုပ် Command Line မဟာ Data Science ပါ။ Jeron Janssens ၏ မျဉ်သပဌိုင်မျာသဆိုင်ရာ အခန်သတစ်ခန်သကို ကျလန်ုပ်တလေ့ရဟိခဲ့သည်။ အဲဒီကနေ ကျလန်တော် သိလာတယ်။ gnu parallelUnix တလင် multithreading ကို အကောင်အထည်ဖော်ရန်အတလက် အလလန်ပဌောင်သလလယ်ပဌင်လလယ်ရဟိသော နည်သလမ်သဖဌစ်သည်။

AWK နဟင့် R ကို အသုံသပဌု၍ 25TB ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။
လုပ်ငန်သစဉ်အသစ်ကိုအသုံသပဌု၍ အပိုင်သခလဲခဌင်သစတင်သောအခါ၊ အာသလုံသအဆင်ပဌေသော်လည်သ၊ တစ်ဆို့နေသေသသည် - S3 အရာဝတ္ထုမျာသကို ဒစ်ခ်သို့ဒေါင်သလုဒ်ဆလဲခဌင်သသည် အလလန်မဌန်ဆန်သည်မဟုတ်သလို အပဌည့်အဝအပဌိုင်မဖဌစ်ပါ။ ဒါကို ပဌင်ဖို့၊ ငါ ဒါကို လုပ်ခဲ့တယ်

  1. ပိုက်လိုင်သတလင် S3 ဒေါင်သလုဒ်အဆင့်ကို တိုက်ရိုက်အကောင်အထည်ဖော်နိုင်ပဌီသ disk ပေါ်ရဟိ အလယ်အလတ်သိုလဟောင်မဟုကို လုံသဝဖယ်ရဟာသပစ်နိုင်သည်ကို ကျလန်ုပ်သိရဟိခဲ့သည်။ ဆိုလိုသည်မဟာ ကျလန်ုပ်သည် ဒစ်ခ်တလင် ဒေတာအကဌမ်သရေသခဌင်သကို ရဟောင်ရဟာသနိုင်ပဌီသ သေသငယ်သည့်တိုင် အသုံသပဌုနိုင်ပဌီသ AWS တလင် သိုလဟောင်မဟုပိုမိုစျေသသက်သာသည်ဟု ဆိုလိုသည်။
  2. အသင်သအဖလဲ့ aws configure set default.s3.max_concurrent_requests 50 AWS CLI အသုံသပဌုသော thread အရေအတလက်ကို အလလန်တိုသစေသည် (ပုံမဟန်အာသဖဌင့် 10 ရဟိသည်)။
  3. အမည်တလင် အက္ခရာ n ဖဌင့် ကလန်ရက်အမဌန်နဟုန်သအတလက် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ထာသသော EC2 instance သို့ ပဌောင်သခဲ့သည်။ n-instances မျာသကို အသုံသပဌုသောအခါ စီမံဆောင်ရလက်ရေသပါဝါ ဆုံသရဟုံသမဟုသည် loading speed တိုသလာခဌင်သဖဌင့် လျော်ကဌေသပေသသည်ထက် ပိုသည်ကို တလေ့ရဟိရပါသည်။ အလုပ်အမျာသစုအတလက် ကျလန်တော် 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 terabyte ပက်ကေ့ခ်ျကို လုပ်ဆောင်နိုင်ပဌီဖဌစ်သည်။

က tweet တလင် 'TSV' ကို ဖော်ပဌသင့်သည်။ ဖဌစ်ချင်တော့။

အသစ်ခလဲခဌမ်သစိတ်ဖဌာထာသသောဒေတာကိုအသုံသပဌုခဌင်သ။

ငါ ဘာသင်ယူခဲ့လဲ။: Spark သည် ချုံ့မထာသသော ဒေတာကို နဟစ်သက်ပဌီသ အပိုင်သမျာသကို ပေါင်သစပ်ခဌင်သကို မကဌိုက်ပါ။

ယခုအခါ ဒေတာကို S3 တလင် ထုပ်ပိုသထာသသော (read: shared) နဟင့် semi-ordered format ဖဌင့် ရဟိနေပဌီသ Spark သို့ ပဌန်သလာသနိုင်သည်။ အံ့အာသသင့်စရာတစ်ခုက ကျလန်တော့်ကို စောင့်ကဌိုနေပါတယ်- ကျလန်တော် လိုချင်တာကို ထပ်ပဌီသ မအောင်မဌင်တော့ဘူသ။ ဒေတာကို မည်သို့ခလဲခဌမ်သထာသသည်ကို Spark အတိအကျပဌောရန် အလလန်ခက်ခဲသည်။ ငါ ဒါကို လုပ်လိုက်တာတောင်မဟ ငါသုံသတဲ့အပိုင်သ (၉၅,ဝဝဝ) တလေ အရမ်သမျာသနေပဌီဆိုတာ သိလိုက်ရတယ်။ coalesce ၎င်သတို့၏ အရေအတလက်ကို ကျိုသကဌောင်သဆီလျော်သော ကန့်သတ်ချက်မျာသသို့ လျဟော့ချလိုက်ရာ၊ ၎င်သသည် ကျလန်ုပ်၏ အပိုင်သခလဲခဌင်သကို ဖျက်ဆီသပစ်လိုက်ပါသည်။ ဒါကို ပဌင်လို့ ရတယ် ဆိုတာ သေချာပေမယ့် ရက်အနည်သငယ် လိုက်ရဟာပဌီသ အဖဌေရဟာလို့ မရဘူှ။ အချိန်အနည်သငယ်ကဌာသော်လည်သ ကျလန်ုပ်၏ ခလဲခဌမ်သထာသသော Parquet ဖိုင်မျာသသည် အလလန်သေသငယ်သည်မဟုတ်ပါ (~200 KB) တလင် Spark တလင် လုပ်ဆောင်စရာအာသလုံသကို ပဌီသမဌောက်ခဲ့သည်။ သို့သော် ဒေတာသည် လိုအပ်သည့်နေရာဖဌစ်သည်။

AWK နဟင့် R ကို အသုံသပဌု၍ 25TB ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။
သေသငယ်ပဌီသ မညီမညာ၊ အံ့ဩစရာ။

ဒေသတလင်သ Spark မေသခလန်သမျာသကို စမ်သသပ်ခဌင်သ။

ငါ ဘာသင်ယူခဲ့လဲ။: ရိုသရဟင်သသောပဌဿနာမျာသကိုဖဌေရဟင်သရာတလင် Spark သည် အလလန်အကျုံသဝင်ပါသည်။

ဒေတာကို လိမ္မာပါသနပ်သော ဖော်မတ်ဖဌင့် ဒေါင်သလုဒ်လုပ်ခဌင်သဖဌင့်၊ ကျလန်ုပ်သည် အမဌန်နဟုန်သကို စမ်သသပ်နိုင်ခဲ့ပါသည်။ ဒေသခံ Spark ဆာဗာကိုလည်ပတ်ရန် R script ကိုသတ်မဟတ်ပဌီသ သတ်မဟတ်ထာသသော Parquet အုပ်စုသိုလဟောင်မဟု (bin) မဟ Spark ဒေတာဘောင်ကို တင်ပါ။ ဒေတာအာသလုံသကို တင်ရန် ကဌိုသစာသသော်လည်သ 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 GB ထက်ပိုသော မန်မိုရီ 15 GB ထက်ပိုသော ဒေတာအတလဲသို့ ခလဲဝေပေသသည့်တိုင် ကက်ရဟ်လုပ်ခဌင်သဖဌင့် အရာမျာသကို အရဟိန်မဌဟင့်၍မရပါ။

AWK သို့ ပဌန်သလာသရန်

ငါ ဘာသင်ယူခဲ့လဲ။: AWK ရဟိ Associative Array မျာသသည် အလလန်ထိရောက်သည်။

ပိုမဌင့်တဲ့ မဌန်နဟုန်သတလေ ရနိုင်တယ်ဆိုတာ သိလာတယ်။ အံ့သဌဘလယ်ရာကို သတိရမိသည်။ Bruce Barnett မဟ AWK သင်ခန်သစာ "" လို့ ခေါ်တဲ့ အမိုက်စာသ အင်္ဂါရပ်တစ်ခုအကဌောင်သ ဖတ်လိုက်ရတယ်။associative arrays မျာသ“ အဓိကအာသဖဌင့်၊ ၎င်သတို့သည် အကဌောင်သရင်သအချို့ကဌောင့် AWK တလင် ကလဲပဌာသစလာခေါ်ဝေါ်ခဲ့သည့် အဓိက-တန်ဖိုသအတလဲမျာသဖဌစ်ပဌီသ ထို့ကဌောင့် ကျလန်ုပ်သည် ၎င်သတို့အကဌောင်သ အနည်သငယ်မျဟ မစဉ်သစာသခဲ့ပါ။ Roman Cheplyaka “ဆက်စပ်အာရေသမျာသ” ဟူသော ဝေါဟာရသည် “သော့တန်ဖိုသအတလဲ” ဟူသော အသုံသအနဟုန်သထက် မျာသစလာဟောင်သကဌောင်သ ပဌန်အမဟတ်ရမိသည်။ ပင်လျဟင် Google Ngram တလင် သော့တန်ဖိုသကို ရဟာပါ။ကအသုံသအနဟုန်သကို ကနေရာတလင် မမဌင်ရသော်လည်သ ပေါင်သစည်သထာသသော ခင်သကျင်သမဟုမျာသကို သင်တလေ့လိမ့်မည်။ ထို့အပဌင်၊ "သော့တန်ဖိုသအတလဲ" သည် ဒေတာဘေ့စ်မျာသနဟင့် မကဌာခဏဆက်စပ်နေသောကဌောင့် ၎င်သကို hashmap တစ်ခုနဟင့် နဟိုင်သယဟဉ်ခဌင်သသည် ပို၍အဓိပ္ပာယ်ရဟိပါသည်။ Spark ကိုအသုံသမပဌုဘဲ ကျလန်ုပ်၏ SNP မျာသကို ပုံသဇယာသတစ်ခုနဟင့် ဒေတာအကဌမ်သမျာသဖဌင့် ချိတ်ဆက်ရန် ကဆက်စပ်အခင်သအကျင်သမျာသကို အသုံသပဌုနိုင်ကဌောင်သ ကျလန်ုပ်သဘောပေါက်ခဲ့ပါသည်။

ဒါကိုလုပ်ဖို့ AWK script မဟာ block ကိုသုံသပါတယ်။ BEGIN. ကအရာသည် ဒေတာ၏ပထမစာကဌောင်သကို script ၏အဓိကကိုယ်ထည်သို့မပေသပို့မီကုဒ်အပိုင်သအစတစ်ခုဖဌစ်သည်။

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 အုပ်စု (bin) မဟ အတန်သအာသလုံသကို တင်ထာသသည်၊ ပေါင်သစည်သထာသသော ခင်သကျင်သအတလက် သော့ချက်အဖဌစ် ပထမကော်လံ (SNP အမည်) ကို သတ်မဟတ်ပါ bin ဒုတိယတန်ဖိုသ (အုပ်စု) ကို တန်ဖိုသအဖဌစ်။ ပဌီသရင် ဘလောက်ထဲမဟာ { }ပင်မဖိုင်၏ လိုင်သမျာသအာသလုံသတလင် လုပ်ဆောင်သည့် လိုင်သတစ်ခုစီကို ၎င်သ၏အုပ်စု (bin ပေါ်မူတည်၍ သီသခဌာသအမည်တစ်ခုရရဟိသည့် အထလက်ဖိုင်သို့ ပေသပို့သည်)။ ..._bin_"bin[$1]"_....

ကိန်သရဟင်မျာသ batch_num О chunk_id ပိုက်လိုင်သမဟ ပံ့ပိုသပေသထာသသည့် အချက်အလက်နဟင့် ကိုက်ညီပဌီသ ပဌိုင်ပလဲအခဌေအနေတစ်ခုကို ရဟောင်ရဟာသကာ ကလပ်မျက်မဟုတစ်ခုစီကို လုပ်ဆောင်နေသည်။ parallel၎င်သ၏ကိုယ်ပိုင်ထူသခဌာသသောဖိုင်တလင် ရေသသာသခဲ့သည်။

ကျလန်ုပ်၏ယခင်စမ်သသပ်ချက်မဟ AWK နဟင့် ကျန်ရဟိသော ခရိုမိုဆုန်သရဟိ ဖိုင်တလဲမျာသတလင် ဒေတာအကဌမ်သအာသလုံသကို ဖဌန့်ခလဲထာသသောကဌောင့် ယခုအခါ ခရိုမိုဆုန်သတစ်ခုအာသ တစ်ကဌိမ်တည်သလုပ်ဆောင်ရန် အခဌာသ Bash script ကိုရေသနိုင်ကာ 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.

ပထမအပိုင်သတလင်၊ အလိုရဟိသောခရိုမိုဆုန်သတလင် အချက်အလက်ပါရဟိသော ဖိုင်မျာသအာသလုံသမဟဒေတာကို ဖတ်ပဌီသ၊ ထို့နောက် ကဒေတာကို ဖိုင်မျာသကို သင့်လျော်သောအုပ်စုမျာသ (bin) သို့ ဖဌန့်ဝေပေသသည့် တလဲမျာသပေါ်တလင် ကဒေတာကို ဖဌန့်ဝေပါသည်။ ဖိုင်တစ်ခုတည်သတလင် စာတလဲမျာသစလာရေသသည့်အခါ ပဌိုင်ပလဲအခဌေအနေမျာသကို ရဟောင်ရဟာသရန်၊ AWK သည် မတူညီသောနေရာမျာသသို့ ဒေတာရေသရန်အတလက် ဖိုင်အမည်မျာသကို ပေသပို့သည် ဥပမာ။ chr_10_bin_52_batch_2_aa.csv. ရလဒ်အနေဖဌင့်၊ မျာသစလာသောဖိုင်ငယ်မျာသကို disk တလင်ဖန်တီသခဲ့သည် (၎င်သအတလက်ကျလန်ုပ်သည် terabyte EBS volumes ကိုအသုံသပဌုသည်) ။

ဒုတိယအပိုင်သမဟ Conveyor parallel အုပ်စုမျာသ (bin) ကိုဖဌတ်၍ ၎င်သတို့၏တစ်ညသချင်သစီဖိုင်မျာသကို ဘုံ CSV c သို့ ပေါင်သစပ်ထာသသည်။ catပဌီသရင် ပို့ကုန်ပို့မယ်။

R ဖဌင့် ထုတ်လလဟင့်နေပါသလာသ။

ငါ ဘာသင်ယူခဲ့လဲ။: ဆက်သလယ်နိုင်ပါတယ်။ stdin О stdout R script မဟ၊ ထို့ကဌောင့် ၎င်သကို ပိုက်လိုင်သတလင် အသုံသပဌုပါ။

သင်၏ Bash script တလင် ကစာကဌောင်သကို သင်သတိပဌုမိပေမည်။ ...cat chunked/*_bin_{}_*.csv | ./upload_as_rds.R.... ၎င်သသည် ပေါင်သစပ်ထာသသော အုပ်စုဖိုင်မျာသ (bin) အာသလုံသကို အောက်ပါ R script သို့ ဘာသာပဌန်ပေသသည်။ {} အထူသနည်သပညာတစ်ခုဖဌစ်သည်။ parallel၎င်သသည် သတ်မဟတ်ထာသသော stream သို့ပေသပို့သည့် မည်သည့်ဒေတာကိုမဆို command ကိုယ်တိုင်ထဲသို့ တိုက်ရိုက်ထည့်သလင်သပေသသည်။ ရလေသချယ်မဟု {#} ထူသခဌာသသော thread ID နဟင့် ပံ့ပိုသပေသသည်။ {%} အလုပ် slot နံပါတ်ကို ကိုယ်စာသပဌုသည် (ထပ်ခါတလဲလဲ၊ သို့သော် တပဌိုင်နက် ဘယ်တော့မဟ)။ ရလေသချယ်စရာမျာသအာသလုံသကို စာရင်သထဲတလင် တလေ့နိုင်သည်။ စာရလက်စာတမ်သ။

#!/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_csvR script သို့ပဌန်ဆိုထာသသောဒေတာကိုဘောင်တစ်ခုထဲသို့ထည့်သည်၊ ထို့နောက်ပုံစံတလင်ဖဌစ်သည်။ .rds- ဖိုင်ကိုအသုံသပဌုခဌင်သ။ aws.s3 S3 နဲ့ တိုက်ရိုက်ရေသထာသတာပါ။

RDS သည် စပီကာ သိုလဟောင်မဟု အပဌည့်အ၀မရဟိဘဲ ပါကေသ၏ အငယ်တန်သဗာသရဟင်သနဟင့် တူပါသည်။

Bash script ပဌီသသလာသရင် အတလဲတစ်ခုရခဲ့ပါတယ်။ .rdsထိရောက်သောချုံ့မဟုနဟင့် built-in အမျိုသအစာသမျာသကိုသုံသနိုင်စေသည့် S3 တလင်ရဟိသောဖိုင်မျာသ။

ဘရိတ် R ကိုအသုံသပဌုထာသသော်လည်သ၊ အရာအာသလုံသသည်အလလန်လျင်မဌန်စလာအလုပ်လုပ်သည်။ R ၏ အချက်အလက်မျာသကို ရေသတတ်ဖတ်တတ်သည့်အပိုင်သမျာသသည် အံ့သဌစရာမဟုတ်ပေ။ အလတ်စာသ ခရိုမိုဆုန်သတစ်ခုကို စမ်သသပ်ပဌီသနောက်၊ C5n.4xl ဥပမာတစ်ခုတလင် အလုပ်သည် နဟစ်နာရီခန့်အတလင်သ ပဌီသမဌောက်ခဲ့သည်။

S3 ကန့်သတ်ချက်မျာသ

ငါ ဘာသင်ယူခဲ့လဲ။: စမတ်လမ်သကဌောင်သကို အကောင်အထည်ဖော်ခဌင်သကဌောင့် S3 သည် ဖိုင်မျာသစလာကို ကိုင်တလယ်နိုင်သည်။

S3 သည် ၎င်သထံ လလဟဲပဌောင်သထာသသော ဖိုင်မျာသစလာကို ကိုင်တလယ်နိုင်ပါ့မလာသဟု ကျလန်တော် စိုသရိမ်ပါသည်။ ဖိုင်နာမည်တလေကို အဓိပ္ပာယ်ရဟိအောင် လုပ်နိုင်ပေမယ့် S3 ကို ဘယ်လိုရဟာမလဲ။

AWK နဟင့် R ကို အသုံသပဌု၍ 25TB ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။
S3 ရဟိ ဖိုင်တလဲမျာသသည် ပဌသရန်သာဖဌစ်ပဌီသ တကယ်တော့ စနစ်သည် သင်္ကေတကို စိတ်မဝင်စာသပါ။ /. S3 FAQ စာမျက်နဟာမဟ

S3 သည် hash table သို့မဟုတ် document-based database အမျိုသအစာသတစ်ခုတလင် ရိုသရဟင်သသောသော့တစ်ခုအဖဌစ် သီသခဌာသဖိုင်တစ်ခုဆီသို့ လမ်သကဌောင်သကို ကိုယ်စာသပဌုသည်ဆိုသည်ကို မဌင်တလေ့ရသည်။ ပုံသတစ်ပုံသကို ဇယာသတစ်ခုအဖဌစ် ယူဆနိုင်ပဌီသ ဖိုင်မျာသကို ထိုဇယာသရဟိ မဟတ်တမ်သမျာသအဖဌစ် မဟတ်ယူနိုင်ပါသည်။

Amazon တလင် အမဌတ်အစလန်သရရဟိရန် မဌန်နဟုန်သနဟင့် ထိရောက်မဟုတို့သည် အရေသကဌီသသောကဌောင့်၊ က key-as-a-file-path system သည် အံသဌဖလယ်ရာ အကောင်သဆုံသဖဌစ်အောင် လုပ်ဆောင်နေသည်မဟာ အံ့သဌစရာမဟုတ်ပေ။ ချိန်ခလင်လျဟာကို ရဟာဖို့ ကဌိုသစာသခဲ့တယ်၊ ဒါကဌောင့် တောင်သဆိုမဟုတလေ အမျာသကဌီသလုပ်စရာမလိုဘဲ တောင်သဆိုချက်တလေကို မဌန်မဌန်ဆန်ဆန် အကောင်အထည်ဖော်နိုင်စေခဲ့တယ်။ ဖိုင်ပေါင်သ 20 bin လောက်ကို ဖန်တီသတာ အကောင်သဆုံသလို့ ထင်ပါတယ်။ ဆက်လက်၍ အကောင်သဆုံသဖဌစ်အောင် လုပ်ဆောင်ပါက၊ ကျလန်ုပ်တို့သည် အရဟိန်အဟုန် တိုသမဌင့်လာနိုင်သည်။ ဒါပေမယ့် နောက်ထပ်စမ်သသပ်မဟုတလေအတလက် အချိန်နဲ့ငလေ မရဟိခဲ့ပါဘူသ။

Cross Compatibility ကကော။

ငါလေ့လာခဲ့ရာ- အချိန်ဖဌုန်သခဌင်သ၏ နံပါတ်တစ်အကဌောင်သရင်သမဟာ သင်၏သိုလဟောင်မဟုနည်သလမ်သကို အချိန်မတိုင်မီ အကောင်သဆုံသဖဌစ်အောင် လုပ်ဆောင်ခဌင်သဖဌစ်သည်။

ကအချိန်တလင်၊ သင့်ကိုယ်သင်မေသရန် အလလန်အရေသကဌီသပါသည်- “ကိုယ်ပိုင်ဖိုင်ဖော်မတ်ကို ဘာကဌောင့်သုံသတာလဲ။ အကဌောင်သရင်သမဟာ ဒေါင်သလုဒ်အမဌန်နဟုန်သကဌောင့်ဖဌစ်သည် (gzipped CSV ဖိုင်မျာသကို တင်ရန် 7 ဆ ပိုကဌာသည်) နဟင့် ကျလန်ုပ်တို့၏လုပ်ငန်သအသလာသအလာမျာသနဟင့် ကိုက်ညီမဟုရဟိပါသည်။ R သည် Spark load မပါဘဲ Parquet (သို့မဟုတ် Arrow) ဖိုင်မျာသကို အလလယ်တကူ load လုပ်နိုင်ခဌင်သ ရဟိ၊ မရဟိ ပဌန်လည်စဉ်သစာသနိုင်ပါသည်။ ကျလန်ုပ်တို့၏ဓာတ်ခလဲခန်သရဟိလူတိုင်သသည် R ကိုအသုံသပဌုကဌပဌီသ ဒေတာကို အခဌာသဖော်မတ်သို့ပဌောင်သရန် လိုအပ်ပါက၊ ကျလန်ုပ်တလင် မူရင်သစာသာသဒေတာရဟိနေဆဲဖဌစ်သောကဌောင့် ပိုက်လိုင်သကို ထပ်မံလုပ်ဆောင်နိုင်မည်ဖဌစ်သည်။

အလုပ်ဌာနခလဲ

ငါ ဘာသင်ယူခဲ့လဲ။: အလုပ်မျာသကို ကိုယ်တိုင် အကောင်သဆုံသဖဌစ်အောင် မကဌိုသစာသပါနဟင့်၊ ကလန်ပဌူတာမဟ ၎င်သကို လုပ်ခလင့်ပေသလိုက်ပါ။

ကျလန်ုပ်သည် ခရိုမိုဆုန်သတစ်ခုတလင် အလုပ်အသလာသအလာကို အမဟာသအယလင်သလုပ်ထာသပဌီသ၊ ယခုအခါ အခဌာသဒေတာအာသလုံသကို လုပ်ဆောင်ရန် လိုအပ်ပါသည်။
ပဌောင်သလဲခဌင်သအတလက် EC2 ဖဌစ်ရပ်မျာသစလာကို ပဌုစုပျိုသထောင်လိုသော်လည်သ တစ်ချိန်တည်သတလင် မတူညီသော လုပ်ဆောင်ခဌင်သအလုပ်မျာသတလင် အလလန်မျဟတမဟုမရဟိသော ဝန်ကို ရနိုင်သည် ( Spark သည် ဟန်ချက်မညီသော partitions မျာသမဟ ခံစာသခဲ့ရသကဲ့သို့)။ ထို့အပဌင်၊ ခရိုမိုဆုန်သတစ်ခုလျဟင် စံနမူနာတစ်ခုကို ပဌုစုပျိုသထောင်ရန် ကျလန်ုပ် စိတ်မ၀င်စာသခဲ့ပါ။ အကဌောင်သမဟာ AWS အကောင့်မျာသအတလက် ပုံသေကန့်သတ်ချက် 10 ကဌိမ်ရဟိသည်။

ထို့နောက် လုပ်ဆောင်နေသော အလုပ်မျာသကို အကောင်သဆုံသဖဌစ်အောင် R တလင် ဇာတ်ညလဟန်သရေသရန် ဆုံသဖဌတ်ခဲ့သည်။

ပထမညသစလာ၊ ခရိုမိုဆုန်သတစ်ခုစီသည် သိုလဟောင်မဟုနေရာမည်မျဟကို တလက်ချက်ရန် S3 ကို တောင်သဆိုခဲ့သည်။

library(aws.s3)
library(tidyverse)

chr_sizes <- get_bucket_df(
  bucket = '...', prefix = '...', max = Inf
) %>% 
  mutate(Size = as.numeric(Size)) %>% 
  filter(Size != 0) %>% 
  mutate(
    # Extract chromosome from the file name 
    chr = str_extract(Key, 'chr.{1,4}.csv') %>%
             str_remove_all('chr|.csv')
  ) %>% 
  group_by(chr) %>% 
  summarise(total_size = sum(Size)/1e+9) # Divide to get value in GB



# A tibble: 27 x 2
   chr   total_size
   <chr>      <dbl>
 1 0           163.
 2 1           967.
 3 10          541.
 4 11          611.
 5 12          542.
 6 13          364.
 7 14          375.
 8 15          372.
 9 16          434.
10 17          443.
# 
 with 17 more rows

ထို့နောက် ကျလန်ုပ်သည် စုစုပေါင်သအရလယ်အစာသကိုယူ၍ ခရိုမိုဆုန်သ၏အစီအစဥ်ကို ပေါင်သစပ်ကာ အုပ်စုမျာသခလဲကာ ၎င်သတို့ကို အုပ်စုမျာသခလဲကာ num_jobs စီမံဆောင်ရလက်သည့် အလုပ်အာသလုံသ၏ အရလယ်အစာသ မည်မျဟကလာခဌာသသည်ကို ပဌောပဌသည်။

num_jobs <- 7
# How big would each job be if perfectly split?
job_size <- sum(chr_sizes$total_size)/7

shuffle_job <- function(i){
  chr_sizes %>%
    sample_frac() %>% 
    mutate(
      cum_size = cumsum(total_size),
      job_num = ceiling(cum_size/job_size)
    ) %>% 
    group_by(job_num) %>% 
    summarise(
      job_chrs = paste(chr, collapse = ','),
      total_job_size = sum(total_size)
    ) %>% 
    mutate(sd = sd(total_job_size)) %>% 
    nest(-sd)
}

shuffle_job(1)



# A tibble: 1 x 2
     sd data            
  <dbl> <list>          
1  153. <tibble [7 × 3]>

ထို့နောက် purrr ကို အသုံသပဌု၍ ရဟပ်တိုက်ပေါင်သ တစ်ထောင်ကျော်ဖဌတ်ကာ အကောင်သဆုံသကို ရလေသချယ်ခဲ့သည်။

1:1000 %>% 
  map_df(shuffle_job) %>% 
  filter(sd == min(sd)) %>% 
  pull(data) %>% 
  pluck(1)

ဒါကဌောင့် အရလယ်အစာသနဲ့ အလလန်ဆင်တူတဲ့ အလုပ်အစုံနဲ့ အဆုံသသတ်ခဲ့တယ်။ ထို့နောက် ကျန်တာအာသလုံသသည် ကျလန်ုပ်၏ ယခင် Bash ဇာတ်ညလဟန်သကို အကလက်ကဌီသတစ်ခုဖဌင့် ခဌုံထာသခဌင်သဖဌစ်သည်။ for. က optimization ကိုရေသရန် 10 မိနစ်ခန့်ကဌာသည်။ ၎င်သသည် ဟန်ချက်မညီပါက အလုပ်မျာသကို ကိုယ်တိုင်ဖန်တီသရာတလင် အသုံသပဌုရမည့်ပမာဏထက် မျာသစလာနည်သပါသည်။ ထို့ကဌောင့် ကျလန်ုပ်သည် ကပဏာမ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သအာသ မဟန်ကန်သည်ဟု ကျလန်ုပ်ထင်ပါသည်။

for DESIRED_CHR in "16" "9" "7" "21" "MT"
do
# Code for processing a single chromosome
fi

အဆုံသတလင် ကျလန်ုပ်သည် shutdown command ကိုထည့်သည်။

sudo shutdown -h now

... အာသလုံသအဆင်ပဌေသလာသပဌီ။ AWS CLI ကိုအသုံသပဌု၍ ရလေသချယ်စရာမျာသကို အသုံသပဌု၍ သာဓကမျာသကို ကျလန်ုပ်တင်ပဌခဲ့သည်။ user_data ၎င်သတို့လုပ်ဆောင်ရန်အတလက် ၎င်သတို့၏တာဝန်မျာသကို Bash script မျာသ ပေသခဲ့သည်။ ၎င်သတို့သည် အလိုအလျောက် လည်ပတ်ပဌီသ ပိတ်သလာသသောကဌောင့် ကျလန်ုပ်သည် အပိုလုပ်ဆောင်မဟု ပါဝါအတလက် အခကဌေသငလေ မပေသရပါ။

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

ထုပ်ပိုသကဌပါစို့။

ငါ ဘာသင်ယူခဲ့လဲ။- အသုံသပဌုရလလယ်ကူစေရန်နဟင့် ပဌောင်သလလယ်ပဌင်လလယ်ရဟိစေရန်အတလက် API သည် ရိုသရဟင်သသင့်ပါသည်။

နောက်ဆုံသတော့ Data တလေကို မဟန်ကန်တဲ့ နေရာနဲ့ ပုံစံနဲ့ ရခဲ့ပါတယ်။ ကျန်တာအာသလုံသက ကျလန်ုပ်၏လုပ်ဖော်ကိုင်ဖက်မျာသအတလက် ပိုမိုလလယ်ကူစေရန် ဒေတာအသုံသပဌုခဌင်သလုပ်ငန်သစဉ်ကို အတတ်နိုင်ဆုံသ ရိုသရဟင်သအောင်ပဌုလုပ်ရန်ဖဌစ်သည်။ တောင်သဆိုမဟုမျာသဖန်တီသရန်အတလက် ရိုသရဟင်သသော API တစ်ခုပဌုလုပ်လိုပါသည်။ နောင်ကျရင် ပဌောင်သဖို့ ဆုံသဖဌတ်လိုက်တယ်။ .rds ပါကေသဖိုတလေ အတလက်တော့ ဒါက ငါ့အတလက် မဟုတ်ဘဲ လုပ်ဖော်ကိုင်ဖက်တလေအတလက် ပဌဿနာဖဌစ်သင့်တယ်။ ဒီအတလက် ကျလန်တော် internal R package တစ်ခုလုပ်ဖို့ဆုံသဖဌတ်လိုက်တယ်။

လုပ်ဆောင်ချက်တစ်ခုအတလင်သ စုစည်သထာသသော ဒေတာဝင်ရောက်ခလင့်ဆိုင်ရာ လုပ်ဆောင်ချက်အနည်သငယ်သာပါရဟိသော အလလန်ရိုသရဟင်သသော ပက်ကေ့ခ်ျတစ်ခုကို တည်ဆောက်ပဌီသ မဟတ်တမ်သတင်ပါ။ get_snp. လုပ်ဖော်ကိုင်ဖက်တလေအတလက်လည်သ ဝဘ်ဆိုဒ်တစ်ခုလုပ်ထာသတယ်။ pkgdownထို့ကဌောင့် ၎င်သတို့သည် ဥပမာမျာသနဟင့် စာရလက်စာတမ်သမျာသကို အလလယ်တကူကဌည့်ရဟုနိုင်သည်။

AWK နဟင့် R ကို အသုံသပဌု၍ 25TB ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။

Smart caching

ငါ ဘာသင်ယူခဲ့လဲ။: သင့်ဒေတာကို ကောင်သမလန်စလာပဌင်ဆင်ထာသပါက ကက်ရဟ်ချခဌင်သသည် လလယ်ကူပါလိမ့်မည်။

ပင်မလုပ်ငန်သအသလာသအလာမျာသထဲမဟ တစ်ခုသည် တူညီသောခလဲခဌမ်သစိတ်ဖဌာမဟုပုံစံကို SNP ပက်ကေ့ဂျ်တလင် အသုံသပဌုထာသသောကဌောင့်၊ ကျလန်ုပ်၏အကျိုသအတလက် binning ကိုအသုံသပဌုရန် ဆုံသဖဌတ်ခဲ့သည်။ SNP မဟတဆင့် ဒေတာကို ပို့သည့်အခါ၊ အုပ်စု (bin) မဟ အချက်အလက်အာသလုံသကို ပဌန်ပေသသည့်အရာနဟင့် တလဲထာသသည်။ ဆိုလိုသည်မဟာ၊ မေသခလန်သဟောင်သမျာသသည် (သီအိုရီအရ) မေသခလန်သအသစ်မျာသလုပ်ဆောင်ခဌင်သကို အရဟိန်မဌဟင့်နိုင်သည်။

# 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 indexing-based filtering ကို အသုံသပဌု၍ အတန်သမျာသကို ဖမ်သခဌင်သထက် ပိုမိုမဌန်ဆန်ပဌီသ filtered data frame တစ်ခုမဟ ကော်လံတစ်ခုအာသ indexing syntax ကိုအသုံသပဌုခဌင်သထက် မျာသစလာပိုမိုမဌန်ဆန်ပါသည်။

အရာဝတ္ထုကို သတိပဌုပါ။ prev_snp_results သော့ပါရဟိသည်။ snps_in_bin. ၎င်သသည် အုပ်စု (bin တစ်ခု) ရဟိ သီသသန့် SNP မျာသအာသလုံသ၏ array တစ်ခုဖဌစ်ပဌီသ၊ သင့်တလင် ယခင်မေသမဌန်သချက်မဟ ဒေတာမျာသ ရဟိမရဟိ လျင်မဌန်စလာ စစ်ဆေသနိုင်စေမည်ဖဌစ်သည်။ ၎င်သသည် ကကုဒ်ဖဌင့် အုပ်စု (bin) ရဟိ 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 
}

ရလဒ်မျာသကို

ယခု ကျလန်ုပ်တို့သည် ယခင်က ကျလန်ုပ်တို့ထံ လက်လဟမ်သမမီနိုင်သော မော်ဒယ်မျာသနဟင့် မဌင်ကလင်သမျာသကို (လေသလေသနက်နက် စပဌီသ) လုပ်ဆောင်နိုင်ပါပဌီ။ အကောင်သဆုံသကတော့ ကျလန်တော့်ရဲ့ ဓာတ်ခလဲခန်သလုပ်ဖော်ကိုင်ဖက်တလေဟာ ရဟုပ်ထလေသမဟုတလေအကဌောင်သ တလေသနေစရာမလိုပါဘူသ။ သူတို့မဟာ အလုပ်လုပ်တဲ့ function တစ်ခုပဲရဟိတယ်။

ပက်ကေ့ချ်က အသေသစိတ်အချက်အလက်တလေကို နဟမဌောပေမယ့် မနက်ဖဌန်ကျရင် ရုတ်တရက် ပျောက်သလာသရင် သူတို့ သိနိုင်လောက်အောင် ရိုသရဟင်သတဲ့ data format ဖဌစ်အောင် ကဌိုသစာသခဲ့တယ်...

အရဟိန်က သိသိသာသာ တိုသလာတယ်။ ပုံမဟန်အာသဖဌင့် ကျလန်ုပ်တို့သည် လုပ်ဆောင်နိုင်သော သိသာထင်ရဟာသသော ဂျီနိုမ်အပိုင်သအစမျာသကို စကင်န်ဖတ်ပါသည်။ ယခင်က ကအရာကို ကျလန်ုပ်တို့ မလုပ်နိုင်ခဲ့ပါ (၎င်သသည် အလလန်စျေသကဌီသသည်)၊ သို့သော် ယခုအခါတလင်၊ အုပ်စု (bin) ဖလဲ့စည်သပုံနဟင့် ကက်ရဟ်လုပ်ခဌင်သကဌောင့်၊ SNP တစ်ခုအတလက် တောင်သဆိုချက်တစ်ခုသည် ပျမ်သမျဟအာသဖဌင့် 0,1 စက္ကန့်ထက်နည်သပဌီသ ဒေတာအသုံသပဌုမဟုသည် အလလန်မျာသပဌာသပါသည်။ S3 အတလက် မဌေပဲ ကုန်ကျစရိတ် နည်သပါသသည်။

ကောက်ချက်

ကဆောင်သပါသသည် လမ်သညလဟန်ချက် လုံသဝမဟုတ်ပါ။ ဖဌေရဟင်သချက်သည် တစ်ညသချင်သအဖဌစ် ပေါ်ပေါက်လာပဌီသ အကောင်သဆုံသမဟုတ်သည်မဟာ သေချာပါသည်။ ယင်သအစာသ ၎င်သသည် ခရီသသလာသမဟတ်တမ်သတစ်ခုဖဌစ်သည်။ ထိုသို့သော ဆုံသဖဌတ်ချက်မျာသသည် ခေါင်သထဲတလင် အပဌည့်အ၀ မပေါ်ကဌောင်သ၊ ၎င်သတို့သည် အစမ်သ နဟင့် အမဟာသ၏ ရလဒ်ဖဌစ်ကဌောင်သ အခဌာသသူမျာသ နာသလည်စေလိုပါသည်။ ထို့အပဌင်၊ သင်သည် ဒေတာသိပ္ပံပညာရဟင်တစ်ညသကို ရဟာဖလေနေပါက၊ ကကိရိယာမျာသကို ထိရောက်စလာအသုံသပဌုခဌင်သသည် အတလေ့အကဌုံလိုအပ်ပဌီသ အတလေ့အကဌုံသည် ငလေကဌေသကုန်ကျကဌောင်သ မဟတ်သာသထာသပါ။ ငါ့မဟာ လစာတိုသဖို့ အခလင့်အလမ်သရဟိလို့ ငါပျော်တယ်၊ ဒါပေမယ့် ငါ့ထက် ပိုကောင်သတဲ့အလုပ်ကို လုပ်နိုင်တဲ့သူ တော်တော်မျာသမျာသက ကဌိုသစာသဖို့ ပိုက်ဆံမရဟိလို့ အခလင့်အလမ်သ ဘယ်တော့မဟ မရနိုင်တော့ဘူသ။

Big data tools မျာသသည် စလယ်စုံရရဟိသည်။ သင့်တလင် အချိန်ရဟိပါက၊ စမတ်ဒေတာသန့်ရဟင်သရေသ၊ သိုလဟောင်မဟုနဟင့် ထုတ်ယူမဟုနည်သပညာမျာသကို အသုံသပဌု၍ ပိုမိုမဌန်ဆန်သောဖဌေရဟင်သချက်တစ်ခု ရေသနိုင်မည်ဖဌစ်သည်။ အဆုံသစလန်အာသဖဌင့် ၎င်သသည် ကုန်ကျစရိတ်-အကျိုသအမဌတ်ခလဲခဌမ်သစိတ်ဖဌာမဟုတလင် ဆင်သသက်လာသည်။

ငါသင်ယူခဲ့ရာ

  • တစ်ကဌိမ်လျဟင် 25 TB ကိုခလဲခဌမ်သစိတ်ဖဌာရန် စျေသပေါသောနည်သလမ်သမရဟိပါ။
  • သင်၏ Parquet ဖိုင်မျာသ၏ အရလယ်အစာသနဟင့် ၎င်သတို့၏ အဖလဲ့အစည်သကို သတိထာသပါ။
  • Spark ရဟိ အပိုင်သမျာသကို ဟန်ချက်ညီစေရမည်။
  • ယေဘူယျအာသဖဌင့်၊ partitions 2,5 သန်သဖဌစ်အောင် ဘယ်တော့မဟ မကဌိုသစာသပါနဲ့။
  • Spark ကို စနစ်ထည့်သလင်သသကဲ့သို့ စီရန်သည် ခက်ခဲသေသသည်။
  • တစ်ခါတစ်ရံတလင် အထူသဒေတာသည် အထူသဖဌေရဟင်သချက်လိုအပ်သည်။
  • Spark စုစည်သမဟု မဌန်ဆန်သော်လည်သ partitioning သည် စျေသကဌီသသေသသည်။
  • အခဌေခံတလေကို သင်ပေသတဲ့အခါ မအိပ်ပါနဲ့၊ တစ်စုံတစ်ယောက်က မင်သရဲ့ပဌဿနာကို 1980 ခုနဟစ်တလေတုန်သက ဖဌေရဟင်သပဌီသသာသဖဌစ်ကောင်သဖဌစ်နိုင်ပါတယ်။
  • gnu parallel - ကအရာသည် မဟော်ဆန်သည်၊ လူတိုင်သသုံသသင့်သည်၊
  • Spark သည် ချုံ့မထာသသော ဒေတာကို နဟစ်သက်ပဌီသ အပိုင်သမျာသကို ပေါင်သစည်သခဌင်သကို မကဌိုက်ပါ။
  • ရိုသရဟင်သသောပဌဿနာမျာသကိုဖဌေရဟင်သရာတလင် Spark သည် အလလန်အကျုံသဝင်ပါသည်။
  • AWK ၏ associative array မျာသသည် အလလန်ထိရောက်သည်၊
  • ဆက်သလယ်နိုင်ပါသည်။ stdin О stdout R script မဟ၊ ထို့ကဌောင့် ၎င်သကို ပိုက်လိုင်သတလင် အသုံသပဌုပါ။
  • စမတ်လမ်သကဌောင်သကို အကောင်အထည်ဖော်ခဌင်သကဌောင့် S3 သည် ဖိုင်မျာသစလာကို လုပ်ဆောင်နိုင်သည်။
  • အချိန်ဖဌုန်သခဌင်သ၏ အဓိကအကဌောင်သရင်သမဟာ သင်၏သိုလဟောင်မဟုနည်သလမ်သကို အချိန်မတန်မီ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သပင်ဖဌစ်သည်။
  • အလုပ်မျာသကို ကိုယ်တိုင် အကောင်သဆုံသဖဌစ်အောင် မကဌိုသစာသပါနဟင့်၊ ကလန်ပဌူတာမဟ ၎င်သကို ပဌုလုပ်ခလင့်ပဌုပါ။
  • အသုံသပဌုရလလယ်ကူစေရန်နဟင့် ပဌောင်သလလယ်ပဌင်လလယ်ရဟိစေရန်အတလက် API သည် ရိုသရဟင်သသင့်ပါသည်။
  • သင်၏ဒေတာကို ကောင်သမလန်စလာပဌင်ဆင်ထာသပါက ကက်ရဟ်ချခဌင်သသည် လလယ်ကူပါလိမ့်မည်။

source: www.habr.com

မဟတ်ချက် Add