ืืื ืืงืจืื ืืช ืืืืืจ ืืื: ืื ื ืืชื ืฆื ืขื ืื ืฉืืืงืกื ืื ืื ืืจืื ืืืืืื. ืืื ืืืกืื ืื ืืื, ืื ื ืคืืชื ืื ืคืจืง ืืืืื "ืื ืืืืชื", ืืืกืืืช ืืช ืืืืช ืืคืจืง ืืืฉืคื ืืื ืื ืฉื ืืื.
"ืจืง ืชืจืื ืื ืืช ืืคืชืจืื!" ืื ืืชื ืจืง ืจืืฆื ืืจืืืช ืืืืคื ืืืชื, ืื ืืื ืืคืจืง "ืืืืืช ืืืชืจ ืืฆืืจืชื", ืืื ืื ื ืืืฉื ืฉืื ืืขื ืืื ืืฉืืืืฉื ืืืชืจ ืืงืจืื ืขื ืืืฉืืื.
ืืืืจืื ื ืืืื ืขืื ืืืงืื ืชืืืื ืืขืืืื ื ืคื ืืืื ืฉื ืจืฆืคื DNA ืืืืืืื (ืืื ืืช ืฉืื SNP). ืืฆืืจื ืืื ืืืฉืื ืืืืืจืืช ื ืชืื ืื ืขื ืืืงืื ืื ืื ื ืชืื (ืื ืงืจื SNP) ืขืืืจ ืืืืืื ืฉืืืืจ ืืื ืืืฉืืืืช ืืืจืืช. ืืืืฆืขืืช R ื-AWK, ืืฆืืืชื ืื ืงืืช ืืืืจืื ื ืชืื ืื ืืฆืืจื ืืืขืืช, ืื ืฉืืืืฅ ืืืื ืืช ืขืืืื ืืฉืืืืชืืช. ืื ืื ืืื ืงื ืขืืืจื ืืืจืฉ ืืืืจืฆืืืช ืจืืืช. ืืืืจ ืื ืืขืืืจ ืื ืืืืื ืข ืืืื ืืืืขืืืืช ืฉืื ืืืจืื ืื ืื ืืืขืชื ืืืื.
ืจืืฉืืช, ืืื ืืกืืจืื ืืืื.
ื ืชืื ืื
ืืืจืื ืืขืืืื ืืืืข ืื ืื ืืืื ืืืจืกืืื ืกืืคืง ืื ื ื ืชืื ืื ืืฆืืจื ืฉื TSV ืฉื 25 TB. ืงืืืืชื ืืืชื ืืืืืงืื ื-5 ืืืืืืช, ืืืืกืืช ืขื ืืื Gzip, ืฉืื ืืืช ืืื ืืืืื ื-240 ืงืืฆืื ืฉื ืืจืืขื ืืืื. ืื ืฉืืจื ืืืืื ื ืชืื ืื ืขืืืจ SNP ืืื ืืืื ืืื. ืืกื ืืื, ืืืขืืจื ื ืชืื ืื ืขื ~2,5 ืืืืืื SNP ื~60 ืืืฃ ืื ืฉืื. ืื ืืกืฃ ืืืืืข SNP, ืืงืืฆืื ืืืืื ืขืืืืืช ืจืืืช ืขื ืืกืคืจืื ืืืฉืงืคืื ืืืคืืื ืื ืฉืื ืื, ืืืื ืขืืฆืืช ืงืจืืื, ืชืืืจืืช ืฉื ืืืืื ืฉืื ืื ืืื'. ืืกื ืืื ืืื ื-30 ืขืืืืืช ืขื ืขืจืืื ืืืืืืืื.
ืืขื
ืืื ืืื ืคืจืืืงื ื ืืืื ื ืชืื ืื, ืืืืจ ืืืฉืื ืืืืชืจ ืืื ืืงืืืข ืืืฆื ืืืขืฉื ืฉืืืืฉ ืื ืชืื ืื. ืืืงืจื ืืื ืื ื ื ืืืจ ืืขืืงืจ ืืืืืื ืืืจืืืืช ืขืืืื ืขืืืจ SNP ืขื ืืกืืก SNP. ืืืืืจ, ื ืฆืืจื ืจืง ื ืชืื ืื ืขื SNP ืืื ืืื ืคืขื. ืืืืชื ืฆืจืื ืืืืื ืืื ืืืืืจ ืืช ืื ืืจืฉืืืืช ืืงืฉืืจืืช ืืืื ื-2,5 ืืืืืื SNPs ืืงืืืช, ืืืืืจืืช ืืืืื ืืื ืืืคืฉืจ.
ืืื ืื ืืขืฉืืช ืืช ืื
ืื ืืฆืื ืงืืืฉืื ืืชืืืื:
ืื ื ืืฉืืชื ืืืฃ ืคืขืืื, ืคืฉืื ืืืืืชื ืืืฃ ืืจืืื ืืืืื ืข ืื ืืชืื ืฉื ืืืืจื ืฉื ื ืชืื ืื ืืคืืจืื ืืืืืืชื ืืฉืืืืชืืช.
ื ืืกืืื ืจืืฉืื
ืื ืืืืชื: ืืื ืืจื ืืืื ืื ืชื 25 TB ืืื ืคืขื.
ืืืืจ ืฉืืืืชื ืืช ืืงืืจืก "ืฉืืืืช ืืชืงืืืืช ืืขืืืื ืืื ืืืื" ืืืื ืืืจืกืืืช ืื ืืจืืืื, ืืืืชื ืืืื ืฉืืืจืืง ื ืืฆื ืืงืืคื. ืื ืืืงื ืื ืจืื ืฉืขื ืื ืฉืขืชืืื ืืืืืืจ ืืช ืฉืจืช Hive ืืจืืฅ ืขื ืื ืื ืชืื ืื ืืืืืื ืขื ืืชืืฆืื. ืืืืืื ืฉืื ืชืื ืื ืฉืื ื ืืืืืกื ืื ื-AWS S3, ืืฉืชืืฉืชื ืืฉืืจืืช
ืืืืจ ืฉืืจืืืชื ืืืชื ื ืืช ืื ืชืื ืื ืฉืื ืืืช ืืคืืจืื ืฉืืื, ืืจืฆืชื ืืื ืืืืงืืช ืขื ืฉืืืืชืืช ืืื ืื:
select * from intensityData limit 10;
ืืงืืื ืืืืืจืืช ืชืืฆืืืช ืืืื ืืช ืืืื. ืืึผืึธื.
ืขื ืฉื ืืกืื ื ืืืฉืชืืฉ ืื ืชืื ืื ืืขืืืืชื ื...
ืืชืืงืฉืชื ืืฉืืืฃ ืืช ืื ืืืืข SNP ืืื ืืืืืง ืืช ืืืื. ืืจืฆืชื ืืช ืืฉืืืืชื:
select * from intensityData
where snp = 'rs123456';
...ืืืื ืืืืืช. ืืืืจ ืฉืืื ื ืืงืืช ืืืืชืจ ื-4 TB ืฉื ื ืชืื ืื ืืืืงืฉืื, ืงืืืืชื ืืช ืืชืืฆืื. ืืชื ื ืืืื ืืคื ื ืคื ืื ืชืื ืื ืฉื ืืฆืื, $5 ืืืจื-ืืืื. ืื ืืืงืฉื ืืืืืืช ืืื ืขืืชื 20 ืืืืจ ืืฉืืื ื ืืงืืช ืฉื ืืืชื ื. ืืื ืืืคืขืื ืืช ืืืืื ืขื ืื ืื ืชืื ืื, ืืืื ื ืฆืจืืืื ืืืืืช 38 ืฉื ืื ืืืฉืื 50 ืืืืืื ืืืืจ, ืืจืืจ ืฉืื ืื ืืชืืื ืื ื.
ืืื ืฆืืจื ืืืฉืชืืฉ ืืคืจืงื...
ืื ืืืืชื: ืืืืืจ ืขื ืืืื ืงืืฆื ืืคืจืงื ืืืืจืืื ืฉืืื.
ืชืืืื ื ืืกืืชื ืืชืงื ืืช ืืืฆื ืขื ืืื ืืืจืช ืื TSVs ื
ืจืฆืชื ืืฉืืื ืคืฉืืื
ืืขื ืืื ืฉืกืื ืืืืืกื ืืืืืืฅ (ืืืืืืืฅ) ืฉื Parquet, Snappy, ืืื ื ื ืืชื ืืคืืฆืื. ืืื, ืื ืืืฆืข ืืื ืชืงืืข ืืืฉืืื ืฉื ืคืืจืืง ืืืืจืืช ืืขืจื ืื ืชืื ืื ืืืื ืฉื 3,5 GB.
ืืืื ื ืืื ืืช ืืืขืื
ืื ืืืืชื: ืืืืื ืงืฉื, ืืืืืื ืื ืื ืชืื ืื ืืืคืฆืื.
ื ืจืื ืื ืฉืขืืฉืื ืืื ืชื ืืช ืืืืช ืืืขืื. ืืืืชื ืฆืจืื ืจืง ืืืืื ืืช ืื ืชืื ืื ืืคื ืขืืืืช SNP, ืื ืืคื ืื ืฉืื. ืืืืจ ืืื, ืืกืคืจ SNPs ืืืืืกื ื ืื ืชื ื ืชืื ืื ื ืคืจื, ืืื ืืคืื ืงืฆืื "ืืืื" ืฉื Parquet "ืคืชืื ืจืง ืื ืืขืจื ื ืืฆื ืืืืื" ืชืจืื ืืช ืขืฆืื ืืืืื ืชืคืืจืชื. ืืจืืข ืืืื, ืืืื ืฉื ืืืืืืจืื ืฉืืจืืช ืืคืืืจืืช ืขื ืคื ื ืืฉืืื ืืชืืจืจ ืืืฉืืื ืงืฉื.
ืื ื ืืืงื ืฉืืขืืจ ืืืืืจืืชืืื ืืงืืื': "ืืืฃ, ืืืฃ ืืื ืื ืืืคืช ืืืืืจืืืืช ืืืืฉืืืืช ืฉื ืื ืืืืืจืืชืื ืืืืื ืืืื"
ืื ื ืื ืกื ืืืืื ืขื ืขืืืื ื-20TB
#ืึฐืขืึนืจึตืจ ืืืื: "ืืื ืื ืืืงื ืื ืื ืืจืื ืืื?"# DataScience ืืืืงืื.โ ื ืืง ืกืืจืืืจ (@NicholasStrayer)
ืืืจืฅ 11, 2019
AWS ืืืืื ืื ืจืืฆื ืืื ืคืืง ืืืืจ ืืืื ืืกืืื "ืื ื ืชืืืื ืืืกื". ืืืจื ืฉืืจืฆืชื ืืืื ื- Amazon Glue, ืืื ืจืฅ ืืืฉื ืืืืืื ืืงืจืก.
ืื ืืืื ืืืืงื ืืืืืฆืืช?
ืื ืืืืชื: ืืืืฆืืช ื-Spark ืืืืืืช ืืืืืช ืืืืื ืืช.
ืืื ืืืขืชื ืืจืขืืื ืฉื ืืืืงืช ื ืชืื ืื ืืืจืืืืืืืื. ืืฉ 23 ืืื (ืืขืื ืืื ืื ืืืงืืื ืืืฉืืื DNA ืืืืืืื ืืจืืืื ืืืืืจืื ืื ืืืืคืื).
ืื ืืืคืฉืจ ืื ืืคืฆื ืืช ืื ืชืื ืื ืื ืชืืื ืงืื ืื ืืืชืจ. ืื ืชืืกืืฃ ืจืง ืฉืืจื ืืืช ืืคืื ืงืฆืืืช ืืืืฆืื Spark ืืกืงืจืืคื Glue partition_by = "chr"
, ืื ืืฉ ืืืืง ืืช ืื ืชืื ืื ืืืืืื.
ืืื ืื ืืืจืื ืืฉืืจืื ืจืืื ืื ืงืจืืื ืืจืืืืืืืื.
ืืืจืื ืืฆืขืจ, ืื ืื ืขืื. ืืืจืืืืืืืื ืืฉ ืืืืื ืฉืื ืื, ืืืืืจ ืืืืืืช ืฉืื ืืช ืฉื ืืืืข. ืืืฉืืขืืช ืืื ืฉืืืฉืืืืช ืฉืกืคืืจืง ืฉืื ืืขืืืืื ืื ืืื ืืืืื ืืช ืืืืฉืืื ืืืืืืืช ืืืืืื ืฉืืืง ืืืฆืืชืื ืกืืืื ืืืงืื ืืืื ืืื. ืขื ืืืช, ืืืฉืืืืช ืืืฉืืื. ืืื ืืฉืืืงืฉื SNP ืืื, ืืืกืจ ืืืืืื ืฉืื ืืจื ืืืขืืืช. ืขืืืช ืขืืืื SNP ืขื ืืจืืืืืืืื ืืืืืื ืืืชืจ (ืืืืืจ, ืืืื ืื ื ืจืืฆืื ืืงืื ื ืชืื ืื) ืืจืื ืจืง ืืคืงืืืจ ืฉื 10 ืืขืจื. ืืจืื, ืืื ืื ืืกืคืืง.
ืื ืื ื ืืืง ืืืชื ืืืืงืื ืงืื ืื ืขืื ืืืชืจ?
ืื ืืืืชื: ืืขืืื ืื ืชื ืกื ืืขืฉืืช 2,5 ืืืืืื ืืืืฆืืช ืืืื.
ืืืืืชื ืืืืช ืขื ืืกืืฃ ืืืืืง ืื SNP. ืื ืืืืื ืฉืืืืืฆืืช ืืืื ืืืืื ืฉืืื. ืื ืืื ืจืขืืื ืืจืืข. ืืฉืชืืฉืชื ืืืืง ืืืืกืคืชื ืงื ืชืืื partition_by = 'snp'
. ืืืฉืืื ืืชืืืื ืืืืื ืืฆืืช ืืคืืขื. ืืื ืืืืจ ืืื ืืืงืชื ืืจืืืชื ืฉืขืืืื ืื ืืชืื ืืืื ื-S3, ืื ืืจืืชื ืืช ืืืฉืืื. ืื ื ืจืื ืืืืื Glue ืืชื ืงืืฆื ืืื ืืื ืืืืงืื ื ืกืชืจ ื-S3, ืืจืื ืงืืฆืื, ืืืื ืืื ืืืืืื. ืืชืืฆืื ืืื, ืืืขืืช ืฉืื ืขืืชื ืืืชืจ ืืืืฃ ืืืืจ ืืื ืืฆืื ืื ืืขืื ื ืืื ืืืจ ืฉืื.
ืืืืงื + ืืืื
ืื ืืืืชื: ืืืืื ืขืืืื ืงืฉื, ืืื ืื ืืืื ืื Spark.
ืื ืืกืืื ืืืืจืื ืฉืื ืืืืืงื ืืื ืืืืงื ืฉื ืืืจืืืืืืืื ืืืืืจ ืืื ืืืื ืื ืืืืฆื. ืืชืืืืจืื, ืื ืืืจื ืื ืฉืืืืชื ืืืืืื ืฉื ืชืื ื ื-SNP ืืจืฆืืืื ืืื ืฆืจืืืื ืืืืืช ืืชืื ืืื ื ืชืื ืคืจืงื ืืืืื ื ืชืื. ืืจืืข ืืืื, ืืืื ืืคืืื ื ืชืื ืื ืืืืืงืื ืืชืืจืจ ืืืฉืืื ืงืฉื. ืืชืืฆืื ืืื, ืขืืจืชื ื-EMR ืขืืืจ ืืฉืืื ืืืชืื ืืืฉืืช ืืืฉืชืืฉืชื ืืฉืืื ื ืืืคืขืื ืจืื ืขืืฆืื (C5.4xl) ืื-Sparklyr ืืื ืืืฆืืจ ืืจืืืช ืขืืืื ืืืืฉื ืืืชืจ...
# Sparklyr snippet to partition by chr and sort w/in partition
# Join the raw data with the snp bins
raw_data
group_by(chr) %>%
arrange(Position) %>%
Spark_write_Parquet(
path = DUMP_LOC,
mode = 'overwrite',
partition_by = c('chr')
)
...ืขื ืืืช, ืืืฉืืื ืขืืืื ืื ืืืฉืืื. ืืืืจืชื ืืช ืื ืืืจืืื ืฉืื ืืช: ืืืืืชื ืืช ืืงืฆืืช ืืืืืจืื ืขืืืจ ืื ืืืฆืข ืฉืืืืชื, ืืฉืชืืฉืชื ืืฆืืชืื ืขื ืืืืช ืืืืื ืฉื ืืืืจืื, ืืฉืชืืฉืชื ืืืฉืชื ื ืฉืืืืจ (ืืฉืชื ื ืฉืืืืจ), ืืื ืืื ืคืขื ืืชืืจืจ ืื ืืื ืืื ืืฆื ืืืื, ืืืืืจืื ืืืื ืืืืฆืขืื ืืืืืฉื ืขื ืฉืืื ื ืขืฆืจ.
ืขืืืื: ืื ืื ืืชืืื.
pic.twitter.com/agY4GU2ru5 โ ื ืืง ืกืืจืืืจ (@NicholasStrayer)
ืืื 15, 2019
ืื ื ื ืืื ืืืชืจ ืืฆืืจืชื
ืื ืืืืชื: ืืคืขืืื ื ืชืื ืื ืืืืืืื ืืืจืฉืื ืคืชืจืื ืืช ืืืืืืื.
ืืื SNP ืืฉ ืขืจื ืืืงืื. ืืื ืืกืคืจ ืืืชืืื ืืืกืคืจ ืืืกืืกืื ืืืืจื ืืืจืืืืืื ืฉืื. ืืืื ืืจื ื ืืืื ืืืืขืืช ืืืจืื ืืช ืื ืชืื ืื ืฉืื ื. ืืืชืืื ืจืฆืืชื ืืืืง ืืคื ืืืืจืื ืฉื ืื ืืจืืืืืื. ืืืืืื, ืขืืืืช 1 - 2000, 2001 - 4000 ืืื'. ืืื ืืืขืื ืืื ืฉ-SNPs ืืื ื ืืคืืืจืื ืืืืคื ืฉืืื ืขื ืคื ื ืืืจืืืืืืืื, ืืืื ืืืื ืืงืืืฆื ืืฉืชื ื ืืืื.
ืืชืืฆืื ืืื ืืืขืชื ืืคืืจืืง ืขืืืืช ืืงืืืืจืืืช (ืืจื). ืืืืฆืขืืช ืื ืชืื ืื ืฉืืืจ ืืืจืื, ืืจืฆืชื ืืงืฉื ืืงืื ืจืฉืืื ืฉื SNPs ืืืืืืืื, ืืืงืืื ืืืืจืืืืืืืื ืฉืืื. ืืืืจ ืืื ืืืื ืชื ืืช ืื ืชืื ืื ืืชืื ืื ืืจืืืืืื ืืืกืคืชื SNPs ืืงืืืฆืืช (ืคื) ืืืืื ื ืชืื. ื ื ืื 1000 SNP ืื ืืื. ืื ื ืชื ืื ืืช ืืงืฉืจ SNP ืืงืืืฆื-ืืืจืืืืืื.
ืืกืืคื ืฉื ืืืจ, ืืื ืชื ืงืืืฆืืช (ืคื) ืฉื 75 SNP, ืืกืืื ืชืืกืืจ ืืืืฉื.
snp_to_bin <- unique_snps %>%
group_by(chr) %>%
arrange(position) %>%
mutate(
rank = 1:n()
bin = floor(rank/snps_per_bin)
) %>%
ungroup()
ื ืกื ืงืืื ืขื ืกืคืืจืง
ืื ืืืืชื: ืฆืืืจืช ืื ืืฆืืฅ ืืื ืืืืจื, ืืื ืืืืืงื ืขืืืื ืืงืจื.
ืจืฆืืชื ืืงืจืื ืืช ืืกืืจืช ืื ืชืื ืื ืืงืื ื ืืื (2,5 ืืืืืื ืฉืืจืืช) ืืชืื Spark, ืืฉืื ืืืชื ืขื ืื ืชืื ืื ืืืืืืืื, ืืื ืืืืง ืืืชื ืืคื ืืขืืืื ืืืืฉื ืฉื ืืกืคื bin
.
# Join the raw data with the snp bins
data_w_bin <- raw_data %>%
left_join(sdf_broadcast(snp_to_bin), by ='snp_name') %>%
group_by(chr_bin) %>%
arrange(Position) %>%
Spark_write_Parquet(
path = DUMP_LOC,
mode = 'overwrite',
partition_by = c('chr_bin')
)
ืืฉืชืืฉืชื sdf_broadcast()
, ืื Spark ืืืืข ืฉืืื ืฆืจืื ืืฉืืื ืืช ืืกืืจืช ืื ืชืื ืื ืืื ืืฆืืชืื. ืื ืฉืืืืฉื ืื ืื ืชืื ืื ืงืื ืื ืืืืืื ืื ืืจืฉืื ืขืืืจ ืื ืืืฉืืืืช. ืืืจืช, Spark ืื ืกื ืืืืืช ืืื ืืืคืืฅ ื ืชืื ืื ืืคื ืืฆืืจื, ืื ืฉืขืืื ืืืจืื ืืืืืืช.
ืืฉืื, ืืจืขืืื ืฉืื ืื ืขืื: ืืืฉืืืืช ืขืืื ืืืฉื ืืื ืื, ืืฉืืืื ืืช ืืืืืื, ืืื, ืืื ืืืืฆืขืื ืฉืืืฉืงื ืขื ืืื ืืืืงื, ืื ืืืื ืืืืืฉื.
ืืืกืคืช AWK
ืื ืืืืชื: ืื ืชืืฉื ืืืฉืจ ืืืืืื ืืืชื ืืช ืืืกืืืืช. ืืื ืืืฉืื ืืืจ ืคืชืจ ืืช ืืืขืื ืฉืื ืืฉื ืืช ื-1980.
ืขื ืื ืงืืื ืื, ืืกืืื ืืื ืืืืฉืืื ืืช ืฉืื ืขื Spark ืืืืชื ืขืจืืืืืืช ืื ืชืื ืื ืืืฉืืื. ืืืื ื ืืชื ืืฉืคืจ ืืช ืืืฆื ืขื ืืืคืื ืืงืืื. ืืืืืชื ืื ืกืืช ืืคืฆื ืืช ื ืชืื ื ืืืงืกื ืืืืืืืื ืืขืืืืืช ืฉื ืืจืืืืืืืื, ืื ืงืืืืืชื ืืกืคืง ื-Spark ื ืชืื ืื "ืืืืืงืื ืืจืืฉ".
ืืืคืฉืชื ื-StackOverflow ืืืฆื ืืคืฆื ืืคื ืขืจืื ืขืืืืืช ืืืฆืืชื stdout
.
ืืชืืชื ืชืกืจืื ืฉื Bash ืืื ืื ืกืืช ืืืชื. ืืืจื ืืช ืืื ืื-TSVs ืืืจืืืื, ืืื ืคืจืง ืืืชื ืืืืฆืขืืช 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 ืืื-ืืืื ืฉื ืืืืจืื. ืืื ืืคืชืืจ ืืช ืืืขืื ืืื ืืืคืกืื ืืจืื ืืกืฃ, ืืืื ื ืฆืจืืืื ืืืืื ืืื ืืงืืืืื ืืช ืืขืืืื. ืืืจืื ืืืื, ืืกืคืจ ืืืืื ืืืืืืื gnu parallel
, ืฉืืื ืืืืฉื ืืืื ืืืืืขืช ืจืืืื ืคืชืืืื ืืืื ืืงืก.
ืืฉืืชืืืชื ืืช ืืืืืงื ืืืืฆืขืืช ืืชืืืื ืืืืฉ, ืืื ืืื ืืกืืจ, ืืื ืขืืืื ืืื ืฆืืืืจ ืืงืืืง - ืืืจืืช ืืืืืืงืื S3 ืืืืกืง ืื ืืืืชื ืืืืจื ืืืืืื ืืื ืืืืชื ืืงืืืื ืืืืืืื. ืืื ืืชืงื ืืช ืื, ืขืฉืืชื ืืช ืื:
- ืืืืืชื ืฉืืคืฉืจ ืืืืฉื ืืช ืฉืื ืืืืจืื ืฉื S3 ืืฉืืจืืช ืืฆื ืจืช, ืืืืื ืืืืืืื ืืช ืืืกืื ืืืื ืืื ืืืืกืง. ืื ืืืืจ ืฉืื ื ืืืื ืืืืื ืข ืืืชืืืช ื ืชืื ืื ืืืืืืื ืืืืกืง ืืืืฉืชืืฉ ืืคืืื ืืืืกืื ืงืื ืืืชืจ, ืืืื ืืื ืืืชืจ, ื-AWS.
- ืงึฐืืึผืฆึธื
aws configure set default.s3.max_concurrent_requests 50
ืืืืื ืืืื ืืช ืืกืคืจ ืืฉืจืฉืืจืื ืฉืืื ืืฉืชืืฉ AWS CLI (ืืืจืืจืช ืืืื ืืฉ 10). - ืขืืจืชื ืืืืคืข EC2 ืืืชืื ืืืืืจืืช ืจืฉืช, ืขื ืืืืช n ืืฉื. ืืืืืชื ืฉืืืืื ืืื ืืขืืืื ืืขืช ืฉืืืืฉ ื-n-ืืืคืขืื ืืืชืจ ืืคืืฆืื ืขื ืืื ืืขืืืื ืืืืืจืืช ืืืขืื ื. ืืจืื ืืืฉืืืืช ืืฉืชืืฉืชื ื-c5n.4xl.
- ืืฉืชื ื
gzip
ืขื , ืืื ืืื gzip ืฉืืืื ืืขืฉืืช ืืืจืื ืืื ืืืื ืืื ืืืงืืื ืืช ืืืฉืืื ืืื-ืืงืืืื ืืชืืืื ืฉื ืคืืจืืง ืงืืฆืื (ืื ืืื ืคืืืช ืขืืจ).pigz
# Let S3 use as many threads as it wants
aws configure set default.s3.max_concurrent_requests 50
for chunk_file in $(aws s3 ls $DATA_LOC | awk '{print $4}' | grep 'chr'$DESIRED_CHR'.csv') ; do
aws s3 cp s3://$batch_loc$chunk_file - |
pigz -dc |
parallel --block 100M --pipe
"awk -F 't' '{print $1",..."$30">"chunked/{#}_chr"$15".csv"}'"
# Combine all the parallel process chunks to single files
ls chunked/ |
cut -d '_' -f 2 |
sort -u |
parallel 'cat chunked/*_{} | sort -k5 -n -S 80% -t, | aws s3 cp - '$s3_dest'/batch_'$batch_num'_{}'
# Clean up intermediate data
rm chunked/*
done
ืืฉืืืื ืืืื ืืฉืืืืื ืื ืืื ืืื ืฉืืื ืืขืืื ืืืจ ืืืื. ืขื ืืื ืืืืืช ืืืืจืืืืช ืืืืจืื ืืืืืื ืืชืืืช ืืืกืงืื, ืืืืืชื ืืขืช ืืขืื ืืืืื ืฉื 5 ืืจื-ืืืื ืชืื ืืกืคืจ ืฉืขืืช ืืืื.
ืืื ืืืจ ืืชืืง ืืืชืจ ืืืจืืืช ืืช ืื ืืืืืืช ืฉืืชื ืืฉืื ืขืืืื ื-AWS ืืฉืืืืฉ. ืืืืืช ื-gnu-parallel ืื ื ืืืื ืืคืชืื ืืืคืฆื CSV ืฉื 19 ืืืื ืืืืืง ืืืืชื ืืืืจืืช ืฉืื ื ืืืื ืืืืจืื ืืืชื. ืืคืืื ืื ืืฆืืืชื ืืืฉืื ื ืืฆืืฅ ืืื ืืืคืขืื ืืช ืื.
# DataScience # ืืื ืืงืก pic.twitter.com/Nqyba2zqEk โ ื ืืง ืกืืจืืืจ (@NicholasStrayer)
ืืื 17, 2019
ืืฆืืืฅ ืืื ืืื ืฆืจืื ืืืืืืจ ืืช 'TSV'. ืืืื.
ืฉืืืืฉ ืื ืชืื ืื ืฉืื ืืชืื ืืืืจืื ื
ืื ืืืืชื: Spark ืืืื ื ืชืื ืื ืื ืืืืกืื ืืื ืืืื ืฉืืืื ืืืืฆืืช.
ืืขืช ืื ืชืื ืื ืืื ื-S3 ืืคืืจืื ืื ืืจืื (ืืงืจื: ืืฉืืชืฃ) ืืืกืืืจ ืืืืฆื, ืืืืืืชื ืืืืืจ ืฉืื ื-Spark. ืืืืชื ืื ืืคืชืขื: ืฉืื ืื ืืฆืืืชื ืืืฉืื ืืช ืื ืฉืจืฆืืชื! ืืื ืงืฉื ืืืื ืืืืจ ื-Spark ืืืืืง ืืื ืื ืชืื ืื ืืืืืงืื. ืืื ืืฉืขืฉืืชื ืืช ืื, ืืชืืจืจ ืฉืืฉ ืืืชืจ ืืื ืืืืฆืืช (95 ืืืฃ), ืืืฉืืฉืชืืฉืชื coalesce
ืฆืืฆื ืืช ืืกืคืจื ืืืืืืืช ืกืืืจืื, ืื ืืจืก ืืช ืืืืืงื ืฉืื. ืื ื ืืืื ืฉืืคืฉืจ ืืชืงื ืืช ืื, ืืื ืืืจื ืืื ืืืื ืฉื ืืืคืืฉืื ืื ืืฆืืืชื ืืืฆืื ืคืชืจืื. ืืกืืคื ืฉื ืืืจ ืกืืืืชื ืืช ืื ืืืฉืืืืช ื-Spark, ืืืจืืช ืฉืื ืืงื ืืื ืืงืืฆื ื-Parquet ืืืคืืฆืืื ืฉืื ืื ืืื ืงืื ืื ืืืืืื (~200 KB). ืขื ืืืช, ืื ืชืื ืื ืืื ืืืื ืฉืืื ืฆืืจื.
ืงืื ืืื ืืื ืืืื, ื ืคืื!
ืืืืงืช ืฉืืืืชืืช Spark ืืงืืืืืช
ืื ืืืืชื: ื-Spark ืืฉ ืืืชืจ ืืื ืชืงืืจื ืืขืช ืคืชืจืื ืืขืืืช ืคืฉืืืืช.
ืขื ืืื ืืืจืืช ืื ืชืื ืื ืืคืืจืื ืืื, ืืฆืืืชื ืืืืืง ืืช ืืืืืจืืช. ืืืืจ ืกืงืจืืคื R ืืืคืขืืช ืฉืจืช Spark ืืงืืื, ืืืืืจ ืืื ืืขื ืืกืืจืช ื ืชืื ืื ืฉื Spark ืืืืืกืื ืืงืืืฆืชื ืฉื Parquet (ืกื) ืฉืฆืืื. ื ืืกืืชื ืืืขืื ืืช ืื ืื ืชืื ืื ืื ืื ืืฆืืืชื ืืืจืื ื-Sparklyr ืืืืืช ืืช ืืืืืงื.
sc <- Spark_connect(master = "local")
desired_snp <- 'rs34771739'
# Start a timer
start_time <- Sys.time()
# Load the desired bin into Spark
intensity_data <- sc %>%
Spark_read_Parquet(
name = 'intensity_data',
path = get_snp_location(desired_snp),
memory = FALSE )
# Subset bin to snp and then collect to local
test_subset <- intensity_data %>%
filter(SNP_Name == desired_snp) %>%
collect()
print(Sys.time() - start_time)
ืืืืฆืื ืืืืจื ืืจืื 29,415 ืฉื ืืืช. ืืจืื ืืืชืจ ืืื, ืืื ืื ืืื ืืื ืืืืืงื ืืืื ืืช ืฉื ืื ืืืจ. ืื ืืกืฃ, ืื ืืืืืชื ืืืืืฅ ืืช ืืขื ืืื ืื ืขื ืฉืืืจื ืืืืืื, ืื ืืฉื ืืกืืชื ืืืืกื ืืกืืจืช ื ืชืื ืื ืืืืืจืื, Spark ืชืืื ืงืจืก, ืื ืืฉืืงืฆืืชื ืืืชืจ ื-50 GB ืฉื ืืืืจืื ืืืขืจื ื ืชืื ืื ืฉืฉืงื ืคืืืช ื-15.
ืืืืจ ื-AWK
ืื ืืืืชื: ืืขืจืืื ืืกืืฆืืืืืืืื ื-AWK ืืขืืืื ืืืื.
ืืื ืชื ืฉืื ื ืืืื ืืืฉืื ืืืืจืืืืช ืืืืืืช ืืืชืจ. ื ืืืจืชื ืืื ืืฆืืจื ื ืคืืื
ืืฉื ืื, ืืกืงืจืืคื AWK ืืฉืชืืฉืชื ืืืืืง BEGIN
. ืืื ืงืืข ืงืื ืฉืืืืฆืข ืืคื ื ืฉืฉืืจืช ืื ืชืื ืื ืืจืืฉืื ื ืืืขืืจืช ืืืืฃ ืืจืืฉื ืฉื ืืกืงืจืืคื.
join_data.awk
BEGIN {
FS=",";
batch_num=substr(chunk,7,1);
chunk_id=substr(chunk,15,2);
while(getline < "snp_to_bin.csv") {bin[$1] = $2}
}
{
print $0 > "chunked/chr_"chr"_bin_"bin[$1]"_"batch_num"_"chunk_id".csv"
}
ืงืืืฆื while(getline...)
ืืขื ืืช ืื ืืฉืืจืืช ืืงืืืฆืช ื-CSV (bin), ืืืืจ ืืช ืืขืืืื ืืจืืฉืื ื (ืฉื SNP) ืืืคืชื ืขืืืจ ืืืขืจื ืืืกืืฆืืืืืื bin
ืืืขืจื ืืฉื ื (ืงืืืฆื) ืืขืจื. ืืื ืืืืืง {
}
, ืฉืืชืืฆืข ืืื ืฉืืจืืช ืืงืืืฅ ืืจืืฉื, ืื ืฉืืจื ื ืฉืืืช ืืงืืืฅ ืืคืื, ืฉืืงืื ืฉื ืืืืืื ืืืชืื ืืงืืืฆื ืฉืื (bin): ..._bin_"bin[$1]"_...
.
ืืฉืชื ืื batch_num
ะธ chunk_id
ืชืืื ืืช ืื ืชืื ืื ืฉืกืืคืงื ืืฆืื ืืจ, ืชืื ืืืื ืขืืช ืืืฆื ืืืจืืฅ, ืืื ืืื ืืืฆืืข ืคืืขื parallel
, ืืชื ืืงืืืฅ ืืืืืื ืืฉืื.
ืืืืืื ืฉืคืืืจืชื ืืช ืื ืื ืชืื ืื ืืืืืืืื ืืชืืงืืืช ืขื ืืจืืืืืืืื ืฉื ืฉืืจื ืืื ืืกืื ืืงืืื ืฉืื ืขื AWK, ืขืืฉืื ืืืืืชื ืืืชืื ืกืงืจืืคื Bash ืืืจ ืืื ืืขืื ืืจืืืืืื ืืื ืืื ืคืขื ืืืฉืืื ื ืชืื ืื ืืืืืงืื ืขืืืงืื ืืืชืจ ื-S3.
DESIRED_CHR='13'
# Download chromosome data from s3 and split into bins
aws s3 ls $DATA_LOC |
awk '{print $4}' |
grep 'chr'$DESIRED_CHR'.csv' |
parallel "echo 'reading {}'; aws s3 cp "$DATA_LOC"{} - | awk -v chr=""$DESIRED_CHR"" -v chunk="{}" -f split_on_chr_bin.awk"
# Combine all the parallel process chunks to single files and upload to rds using R
ls chunked/ |
cut -d '_' -f 4 |
sort -u |
parallel "echo 'zipping bin {}'; cat chunked/*_bin_{}_*.csv | ./upload_as_rds.R '$S3_DEST'/chr_'$DESIRED_CHR'_bin_{}.rds"
rm chunked/*
ืืชืกืจืื ืืฉ ืฉื ื ืืืงืื parallel
.
ืืกืขืืฃ ืืจืืฉืื ืงืืจืืื ื ืชืื ืื ืืื ืืงืืฆืื ืืืืืืื ืืืืข ืขื ืืืจืืืืืื ืืจืฆืื, ืืืืจ ืืื ื ืชืื ืื ืืื ืืืคืฆืื ืขื ืคื ื ืฉืจืฉืืจืื, ืืฉืจ ืืคืืฆืื ืืช ืืงืืฆืื ืืงืืืฆืืช ืืืชืืืืืช (bin). ืืื ืืืืื ืข ืืชื ืื ืืจืืฅ ืืืฉืจ ืฉืจืฉืืจืื ืืจืืืื ืืืชืืื ืืืืชื ืงืืืฅ, AWK ืืขืืืจ ืืช ืฉืืืช ืืงืืฆืื ืืื ืืืชืื ื ืชืื ืื ืืืงืืืืช ืฉืื ืื, ืืืฉื. chr_10_bin_52_batch_2_aa.csv
. ืืชืืฆืื ืืื ื ืืฆืจืื ืงืืฆืื ืงืื ืื ืจืืื ืืืืกืง (ืืฉืืื ืื ืืฉืชืืฉืชื ืื ืคืื EBS ืฉื ืืจื-ืืืื).
ืืกืืข ืืืืืง ืืฉื ื parallel
ืขืืืจ ืขื ืืงืืืฆืืช (bin) ืืืฉืื ืืช ืืงืืฆืื ืืืืฉืืื ืฉืืื ื-CSV ืืฉืืชืฃ c cat
ืืืืืจ ืืื ืฉืืื ืืืชื ืืืืฆืื.
ืฉืืืืจ ื-R?
ืื ืืืืชื: ืืชื ืืืื ืืืฆืืจ ืงืฉืจ stdin
ะธ stdout
ืืกืงืจืืคื R, ืืืื ืืฉืชืืฉืื ืื ืืฆื ืจืช.
ืืืื ืฉืืช ืื ืืฉืืจื ืืื ืืชืกืจืื ืืืืฉ ืฉืื: ...cat chunked/*_bin_{}_*.csv | ./upload_as_rds.R...
. ืื ืืชืจืื ืืช ืื ืงืืฆื ืืงืืืฆื ืืืฉืืจืฉืจืื (bin) ืืกืงืจืืคื 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 ืืื ืืฉืื ืืื ืืจืกื ืืืืจืช ืฉื ืคืจืงื, ืืื ืืชืืืืืืืช ืฉื ืืืกืื ืจืืงืืืื.
ืืืืจ ืกืืื ืืชืกืจืื ืฉื Bash ืงืืืืชื ืืืืื .rds
-ืงืืฆืื ืืืืืงืืื ื-S3, ืื ืฉืืคืฉืจ ืื ืืืฉืชืืฉ ืืืืืกื ืืขืืื ืืืกืืืื ืืืื ืื.
ืืืจืืช ืืฉืืืืฉ ืืืื R, ืืื ืขืื ืืืจ ืืืื. ืืืืคื ืื ืืคืชืืข, ืืืืงืื ืฉื R ืฉืงืืจืืื ืืืืชืืื ื ืชืื ืื ืืืชืืืื ืืืื. ืืืืจ ืืืืงื ืขื ืืจืืืืืื ืืื ืืืืื ืืื ืื ื, ืืขืืืื ืืืฉืืื ืขื ืืืคืข C5n.4xl ืชืื ืืฉืขืชืืื.
ืืืืืืช S3
ืื ืืืืชื: ืืืืืช ืืืืฉืื ื ืชืื ืืื, S3 ืืืื ืืืชืืืื ืขื ืงืืฆืื ืจืืื.
ืืืืชื ืื S3 ืืืื ืืืคื ืืงืืฆืื ืืจืืื ืฉืืืขืืจื ืืืื. ืื ื ืืืื ืืืจืื ืืฉืืืช ืืงืืฆืื ืืืืืช ืืืืื ืืื, ืืื ืืื S3 ืืืคืฉ ืืืชื?
ืชืืงืืืช ื-S3 ืื ืจืง ืืจืืืื, ืืืขืฉื ืืืขืจืืช ืื ืืขืื ืืื ืช ืืกืื /
.
ื ืจืื ืฉ-S3 ืืืืฆื ืืช ืื ืชืื ืืงืืืฅ ืืกืืื ืืืคืชื ืคืฉืื ืืืขืื ืืืืช hash ืื ืืกื ื ืชืื ืื ืืืืกืก ืืกืืืื. ื ืืชื ืืืชืืืืก ืืืื ืืขื ืืืื, ืืงืืฆืื ืืืืืื ืืืืืฉื ืืจืฉืืืืช ืืืืื ืื.
ืืืืืื ืฉืืืืจืืช ืืืขืืืืช ืืฉืืืืช ืืจืืื ืืืืืื, ืืื ืื ืืคืชืืข ืฉืืขืจืืช ืืืคืชื ืืงืืืฅ ื ืชืื ืื ืืืคืืืืืืช ืืฆืืจื ืืืืจืคืช. ื ืืกืืชื ืืืฆืื ืืืืื: ืืื ืฉืื ืืฆืืจื ืืืฆืข ืืจืื ืืงืฉืืช get, ืืื ืฉืืืงืฉืืช ืืืฆืขื ืืืืืจืืช. ืืชืืจืจ ืฉืขืืืฃ ืืืืื ื-20 ืืืฃ ืงืืฆื bin. ืื ื ืืืฉื ืฉืื ื ืืฉืื ืืืฆืข ืืืคืืืืืืฆืื, ื ืืื ืืืฉืื ืขืืืื ืืืืืจืืช (ืืืืืื, ืืฆืืจืช ืืื ืืืืื ืจืง ืขืืืจ ื ืชืื ืื, ืืืื ืืืงืืื ืืช ืืืื ืืืืช ืืืืคืืฉ). ืืื ืื ืืื ืืื ืื ืืกืฃ ืื ืืกืืืื ื ืืกืคืื.
ืื ืืืื ืชืืืืืช ืฆืืืืช?
ืื ืืืืชื: ืืกืืื ืืกืคืจ ืืืช ืืืืืื ืืื ืืื ืืืคืืืืืืฆืื ืฉื ืฉืืืช ืืืืกืื ืฉืื ืืืจื ืขืช.
ืืฉืื ืื, ืืฉืื ืืืื ืืฉืืื ืืช ืขืฆืื: "ืืืืข ืืืฉืชืืฉ ืืคืืจืื ืงืืืฅ ืงื ืืื ื?" ืืกืืื ื ืขืืฆื ืืืืืจืืช ืืืขืื ื (ืืืขืื ืช ืงืืฆื CSV ื-gzip ืืงื ืคื 7 ืืืชืจ ืืื) ืืืชืืืืืช ืขื ืืจืืืืช ืืขืืืื ืฉืื ื. ืื ื ืขืฉืื ืืฉืงืื ืืืืฉ ืื R ืืืื ืืืขืื ืืงืืืช ืงืืฆื ืคืจืงื (ืื ืืฅ) ืืื ืขืืืก Spark. ืืืื ืืืขืืื ืฉืื ื ืืฉืชืืฉืื ื-R, ืืื ืื ื ืฆืจืื ืืืืืจ ืืช ืื ืชืื ืื ืืคืืจืื ืืืจ, ืขืืืื ืืฉ ืื ืืช ื ืชืื ื ืืืงืกื ืืืงืืจืืื, ืื ืื ื ืืืื ืคืฉืื ืืืคืขืื ืืช ืืฆืื ืืจ ืฉืื.
ืืืืงืช ืขืืืื
ืื ืืืืชื: ืื ืชื ืกื ืืืืขื ืขืืืืืช ืืืืคื ืืื ื, ืชื โโืืืืฉื ืืขืฉืืช ืืืช.
ื ืืคืื ืืืืื ืืืจืืืช ืืขืืืื ืืืจืืืืืื ืืื, ืขืืฉืื ืื ื ืฆืจืื ืืขืื ืืช ืื ืื ืชืื ืื ืืืืจืื.
ืจืฆืืชื ืืืขืืืช ืืื ืืืคืขืื ืฉื EC2 ืืืืจื, ืืื ืืืงืืื ืคืืืชื ืืงืื ืขืืืก ืืืื ืื ืืืืื ืขื ืคื ื ืขืืืืืช ืขืืืื ืฉืื ืืช (ืืืืืง ืืคื ืฉ-Spark ืกืื ืืืืืฆืืช ืื ืืืืื ืืช). ืื ืืกืฃ, ืื ืืืืชื ืืขืื ืืื ืืืขืืืช ืืืคืข ืืื ืืื ืืจืืืืืื, ืื ืืืฉืืื ืืช AWS ืืฉ ืืืืืช ืืจืืจืช ืืืื ืฉื 10 ืืืคืขืื.
ืืื ืืืืืชื ืืืชืื ืกืงืจืืคื ื-R ืืื ืืืืขื ืขืืืืืช ืขืืืื.
ืจืืฉืืช, ืืืงืฉืชื ื-S3 ืืืฉื ืืื ืฉืื ืืืกืื ืชืืคืก ืื ืืจืืืืืื.
library(aws.s3)
library(tidyverse)
chr_sizes <- get_bucket_df(
bucket = '...', prefix = '...', max = Inf
) %>%
mutate(Size = as.numeric(Size)) %>%
filter(Size != 0) %>%
mutate(
# Extract chromosome from the file name
chr = str_extract(Key, 'chr.{1,4}.csv') %>%
str_remove_all('chr|.csv')
) %>%
group_by(chr) %>%
summarise(total_size = sum(Size)/1e+9) # Divide to get value in GB
# A tibble: 27 x 2
chr total_size
<chr> <dbl>
1 0 163.
2 1 967.
3 10 541.
4 11 611.
5 12 542.
6 13 364.
7 14 375.
8 15 372.
9 16 434.
10 17 443.
# โฆ with 17 more rows
ืืืจ ืื ืืชืืชื ืคืื ืงืฆืื ืฉืืืงืืช ืืช ืืืืื ืืืืื, ืืขืจืืืช ืืช ืกืืจ ืืืจืืืืืืืื, ืืืืงืช ืืืชื ืืงืืืฆืืช num_jobs
ืืืกืคืจ ืื ืขื ืืื ืืืืืื ืฉืื ืื ืฉื ืื ืขืืืืืช ืืขืืืื.
num_jobs <- 7
# How big would each job be if perfectly split?
job_size <- sum(chr_sizes$total_size)/7
shuffle_job <- function(i){
chr_sizes %>%
sample_frac() %>%
mutate(
cum_size = cumsum(total_size),
job_num = ceiling(cum_size/job_size)
) %>%
group_by(job_num) %>%
summarise(
job_chrs = paste(chr, collapse = ','),
total_job_size = sum(total_size)
) %>%
mutate(sd = sd(total_job_size)) %>%
nest(-sd)
}
shuffle_job(1)
# A tibble: 1 x 2
sd data
<dbl> <list>
1 153. <tibble [7 ร 3]>
ืืืจ ืื ืขืืจืชื ืืืฃ ืืฉืืืฉืื ืืืืฆืขืืช purrr ืืืืจืชื ืืช ืืืื ืืืืชืจ.
1:1000 %>%
map_df(shuffle_job) %>%
filter(sd == min(sd)) %>%
pull(data) %>%
pluck(1)
ืื ืืกืืคื ืฉื ืืืจ ืงืืืืชื ืงืืืฆื ืฉื ืืฉืืืืช ืฉืืื ืืืื ืืืืืช ืืืืืื. ืืื ืื ืื ืฉื ืืชืจ ืืื ืืขืืืฃ ืืช ืืชืกืจืื ืืงืืื ืฉืื ืืฉืฉ ืืืืค ืืืื for
. ืืชืืืช ืืืืคืืืืืืฆืื ืืื ืืจืื ื-10 ืืงืืช. ืืื ืืจืื ืคืืืช ืืื ืฉืืืืชื ืืืฆืื ืขื ืืฆืืจื ืืื ืืช ืฉื ืืฉืืืืช ืื ืื ืื ืืื ืืืืื ืืช. ืืื, ืื ื ืืืฉื ืฉืฆืืงืชื ืขื ืืืืคืืืืืืฆืื ืืจืืฉืื ืืช ืืื.
for DESIRED_CHR in "16" "9" "7" "21" "MT"
do
# Code for processing a single chromosome
fi
ืืกืืฃ ืื ื ืืืกืืฃ ืืช ืคืงืืืช ืืืืืื:
sudo shutdown -h now
... ืืืื ืืกืชืืจ! ืืืืฆืขืืช ื-AWS CLI, ืืขืืืชื ืืืคืขืื ืืืืฆืขืืช ืืืคืฉืจืืช user_data
ื ืชื ืืื ืชืกืจืืืื ืฉื Bash ืฉื ืืืฉืืืืช ืฉืืื ืืขืืืื. ืื ืจืฆื ืื ืืื ืืืืืืืืช, ืื ืื ืฉืืืืชื ืขืืืจ ืืื ืขืืืื ื ืืกืฃ.
aws ec2 run-instances ...
--tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=<<job_name>>}]"
--user-data file://<<job_script_loc>>
ืืืื ืืืจืื!
ืื ืืืืชื: ื-API ืฆืจืื ืืืืืช ืคืฉืื ืืืขื ืืงืืืช ืืืืืืฉืืช ืืฉืืืืฉ.
ืืืกืืฃ ืงืืืืชื ืืช ืื ืชืื ืื ืืืงืื ืืืฆืืจื ืื ืืื ืื. ืื ืฉื ืืชืจ ืืื ืืคืฉื ืืช ืชืืืื ืืฉืืืืฉ ืื ืชืื ืื ืืื ืืืคืฉืจ ืืื ืืืงื ืขื ืืงืืืืืช ืฉืื. ืจืฆืืชื ืืืฆืืจ API ืคืฉืื ืืืฆืืจืช ืืงืฉืืช. ืื ืืขืชืื ืืืืื ืืขืืืจ ื .rds
ืืงืืฆื ืคืจืงื, ืื ืื ืฆืจืืื ืืืืืช ืืขืื ืขืืืจื, ืื ืขืืืจ ืืงืืืืืช ืฉืื. ืืฉืืื ืื ืืืืืชื ืืืืื ืืืืืช R ืคื ืืืืช.
ืื ื ืืชืขื ืืืืื ืคืฉืืื ืืืื ืืืืืื ืจืง ืืื ืคืื ืงืฆืืืช ืืืฉื ืื ืชืื ืื ืืืืืจืื ืืช ืกืืื ืคืื ืงืฆืื get_snp
. ืืื ืชื ืื ืืชืจ ืืขืืืชืื ืฉืื
ืืืืื ืืื
ืื ืืืืชื: ืื ืื ืชืื ืื ืฉืื ืืืื ืื ืืืื, ืืืืกืื ืืืืืื ืืืื ืงื!
ืืืืืื ืฉืืื ืืืจืืืืช ืืขืืืื ืืขืืงืจืืืช ืืืฉื ืืช ืืืชื ืืืื ื ืืชืื ืขื ืืืืืช SNP, ืืืืืชื ืืืฉืชืืฉ ื-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
ืืื ืืจืื ืืืชืจ ืืืืจ ืืืฉืจ ืืืืืช ืฉืืจืืช ืืืืฆืขืืช ืกืื ืื ืืืืกืก ืืื ืืงืก, ืืืืืืจ ืขืืืื ืืืืืช ืืืกืืจืช ื ืชืื ืื ืืกืื ื ืช ืืืืชื ืืืืจื ืืืจืื ืืฉืืืืฉ ืืชืืืืจ ืืื ืืงืก.
ืฉืืื ืื ืฉืืืืืืืงื prev_snp_results
ืืืื ืืช ืืืคืชื snps_in_bin
. ืืื ืืขืจื ืฉื ืื ื-SNPs ืืืืืืืืื ืืงืืืฆื (bin), ืืืืคืฉืจ ืื ืืืืืง ืืืืืจืืช ืื ืืืจ ืืฉ ืื ื ืชืื ืื ืืฉืืืืชื ืงืืืืช. ืื ืื ืืงื ืขื ืืืืื ืืจื ืื ื-SNPs ืืงืืืฆื (ืคื) ืขื ืืงืื ืืื:
# Get bin-mates
snps_in_bin <- my_snp_results$snps_in_bin
for(current_snp in snps_in_bin){
my_snp_results <- get_snp(current_snp, my_snp_results)
# Do something with results
}
ืืืฆืืื
ืืขืช ืื ื ืืืืืื (ืืืชืืื ื ืืืคืขืื ืืจืฆืื ืืช) ืืืืืื ืืชืจืืืฉืื ืฉืืขืืจ ืื ืืื ื ืืืฉืื ืขืืืจื ื. ืืืืจ ืืืื ืืืืชืจ ืืื ืฉืขืืืชืื ืืืขืืื ืื ืฆืจืืืื ืืืฉืื ืขื ืฉืื ืกืืืืืื. ืืฉ ืืื ืคืฉืื ืคืื ืงืฆืื ืฉืขืืืืช.
ืืืืจืืช ืฉืืืืืื ืืืกืืช ืืื ืืช ืืคืจืืื, ื ืืกืืชื ืืืคืื ืืช ืคืืจืื ืื ืชืื ืื ืืคืฉืื ืืกืคืืง ืืื ืฉืื ืืืืื ืืืืื ืืช ืื ืื ืคืชืืื ืืขืื ืืืจ...
ืืืืืจืืช ืขืืชื ืืฆืืจื ื ืืืจืช. ืื ืื ื ืืืจื ืืื ืกืืจืงืื ืฉืืจื ืื ืื ืืฉืืขืืชืืื ืืืืื ื ืชืคืงืืืืช. ืืขืืจ, ืื ืืืืื ื ืืขืฉืืช ืืืช (ืืชืืจืจ ืฉืื ืืงืจ ืืื), ืืื ืขืืฉืื, ืืืืืช ืืืื ื ืืงืืืฆื (ืคื) ืืืืืกืื ืืืืืื, ืืงืฉื ื-SNP ืืื ื ืืฉืืช ืืืืืฆืข ืคืืืช ื-0,1 ืฉื ืืืช, ืืืฉืืืืฉ ืื ืชืื ืื ืืื ืื ืื ื ืืื ืฉืืขืืืืืช ืขืืืจ S3 ืื ืืืื ืื.
ืืืืจืื ื ืืืื ืกืชื ืืฉืื ืื ืฉื 25+ TB ืฉื ื ืชืื ื ืื ืืืืค ืืืืืืื ืขืืืจ ืืืขืืื ืฉืื. ืืฉืืชืืืชื, ืืฉืืืืฉ ื-Spark ืืงื 8 ืืงืืช ืืขืื 20 ืืืืจ ืืื ืืืฆืข ืฉืืืืชืืช SNP. ืืืืจ ืฉืืืืฉ ื-AWK+
#rstats ืืขืืืื, ืื ืืืงื ืืขืช ืคืืืช ืืขืฉืืจืืช ืืฉื ืืื ืืขืืื $10. ืืืืฉืืืช ืฉืื# BigData ืื ืฆื.pic.twitter.com/ANOXVGrmkk โ ื ืืง ืกืืจืืืจ (@NicholasStrayer)
ืืื 30, 2019
ืืกืงื ื
ืืืืจ ืื ืืื ื ืืืจืื ืืื. ืืคืชืจืื ืืชืืจืจ ืืืื ืืืืืืืืื, ืืืืขื ืืืืืืืช ืื ืืืคืืืืื. ืืืชืจ ืืืืง, ืื ืกืคืจ ืืกืข. ืื ื ืจืืฆื ืฉืืืจืื ืืืื ื ืฉืืืืืืช ืืืื ืื ืืืคืืขืืช ืืืืจื ืืจืืฉ, ืื ืชืืฆืื ืฉื ื ืืกืื ืืืขืืื. ืืื ืื, ืื ืืชื ืืืคืฉืื ืืืขื ื ืชืื ืื, ืงืื ืืืฉืืื ืฉืฉืืืืฉ ืืืืื ืืื ืืืจืฉ ื ืืกืืื ืืืขืืืืช, ืื ืืกืืื ืขืืื ืืกืฃ. ืื ื ืฉืื ืฉืืื ืื ืืช ืืืืฆืขืื ืืฉืื, ืืื ืจืืื ืืืจืื ืฉืืืืืื ืืขืฉืืช ืืช ืืืชื ืขืืืื ืืืชืจ ืืื ืืื ื ืืขืืื ืื ืืืื ืืืืืื ืืช ืืืืกืจ ืืกืฃ ืืคืืื ืื ืกืืช.
ืืื ืืื ืืืื ืื ืืืืื ืื. ืื ืืฉ ืื ืืื, ืืืขื ืืืืืืืช ืชืืื ืืืชืื ืคืชืจืื ืืืืจ ืืืชืจ ืืืืฆืขืืช ืืื ืืงืืช ืืืืืช ืฉื ื ืืงืื, ืืืกืื ืืืืืืฅ ื ืชืื ืื. ืืกืืคื ืฉื ืืืจ ืื ืืกืชืื ืื ืืชืื ืขืืืช-ืชืืขืืช.
ืื ืืืืชื:
- ืืื ืืจื ืืืื ืื ืชื 25 TB ืืื ืคืขื;
- ืืืืืจ ืขื ืืืื ืงืืฆื ืืคืจืงื ืืืืจืืื ืฉืืื;
- ืืืืฆืืช ื-Spark ืืืืืืช ืืืืืช ืืืืื ืืช;
- ืืืืคื ืืืื, ืืขืืื ืื ืชื ืกื ืืืฆืืจ 2,5 ืืืืืื ืืืืฆืืช;
- ืืืืื ืขืืืื ืงืฉื, ืืื ืื ืืงืืช Spark;
- ืืคืขืืื ื ืชืื ืื ืืืืืืื ืืืจืฉืื ืคืชืจืื ืืช ืืืืืืื;
- ืฆืืืจืช ืื ืืฆืืฅ ืืื ืืืืจื, ืืื ืืืืืงื ืขืืืื ืืงืจื;
- ืื ืชืืฉื ืืฉืื ืืืืืื ืืืชื ืืช ืืืกืืืืช, ืืืฉืื ืื ืจืื ืคืชืจ ืื ืืช ืืืขืื ืขืื ืืฉื ืืช ืืฉืืื ืื;
gnu parallel
- ืื ืืืจ ืงืกืื, ืืืื ืฆืจืืืื ืืืฉืชืืฉ ืื;- Spark ืืืื ื ืชืื ืื ืื ืืืืกืื ืืืื ื ืืืื ืฉืืืื ืืืืฆืืช;
- ื-Spark ืืฉ ืืืชืจ ืืื ืชืงืืจื ืืขืช ืคืชืจืื ืืขืืืช ืคืฉืืืืช;
- ืืืขืจืืื ืืืกืืฆืืืืืืืื ืฉื AWK ืืขืืืื ืืืื;
- ืืชื ืืืื ืืืฆืืจ ืงืฉืจ
stdin
ะธstdout
ืืกืงืจืืคื R, ืืืื ืืฉืชืืฉืื ืื ืืฆื ืจืช; - ืืืืืช ืืืืฉืื ื ืชืื ืืื, S3 ืืืื ืืขืื ืงืืฆืื ืจืืื;
- ืืกืืื ืืขืืงืจืืช ืืืืืื ืืื ืืื ืืืคืืืืืืฆืื ืฉื ืฉืืืช ืืืืกืื ืฉืื ืืืจื ืขืช;
- ืื ืชื ืกื ืืืืขื ืืฉืืืืช ืืืืคื ืืื ื, ืชื โโืืืืฉื ืืขืฉืืช ืืืช;
- ื-API ืฆืจืื ืืืืืช ืคืฉืื ืืืขื ืืงืืืช ืืืืืืฉืืช ืืฉืืืืฉ;
- ืื ืื ืชืื ืื ืฉืื ืืืื ืื ืืืื, ืืืืกืื ืืืืืื ืืืื ืงื!
ืืงืืจ: www.habr.com