使用DataBricks Delta簡化基因組學管道

在Databricks中嚐試此筆記本
此博客是我們“規模基因組分析”係列中的第一個博客。在這個係列中,我們將展示如何如何Databricks Genomics的統一分析平台Beplay体育安卓版本使客戶能夠分析人beplay体育app下载地址口規模的基因組數據。從我們的輸出開始基因組管道,本係列將提供使用Databroks運行樣品質量控製,聯合基因分型,群組質量控製和高級統計遺傳學分析的教程。


自完成以來人類基因組項目2003年,通過3B美元的DNA測序成本急劇下降,爆發了爆炸性,從3B美元起1對於今天的第一個基因組低於1,000美元。

[1]人類基因組項目是由能源部領導的3B項目,國家衛生研究院於1990年開始,並於2003年完成。

每種基因成本

來源:DNA測序成本:數據

因此,基因組學領域現在已經成熟到公司在人口規模上開始進行DNA測序的階段。然而,測序DNA代碼僅是第一步,則需要將原始數據轉換為適合於分析的格式。通常,這是通過粘合在一起的一係列的生物信息學具有自定義腳本的工具和處理單個節點上的數據,一次一個樣本,直到我們結束一個基因組變體。生物信息學科學家今天花了大部分時間,並維持這些管道。隨著基因組數據集的擴展到Petabyte規模,即使是及時的方式,也會挑戰以下簡單的問題:

  • 我們本月測序了多少個樣本?
  • 檢測到的獨特變體總數是多少?
  • 我們在不同類別的變化中看到了多少個變體?

進一步複製此問題,來自數千個個體的數據無法存儲,跟蹤或版本,同時還剩下可訪問和查詢。因此,研究人員在進行分析時經常重複其基因組數據的子集,導致整體存儲足跡和成本升級。為了緩解這個問題,今天研究人員采用了“數據凍結”的策略,通常在六個月到兩年之間,他們停止了新數據,而是專注於現有數據的凍結副本。沒有解決方案逐步構建分析較短的時間框架,導致研究進展減速。

有一種強大的軟件需要在工業規模中消耗基因組數據,同時還保留了科學家探索數據的靈活性,迭代其分析管道,並獲得新的見解。

DataBricks的端到端基因組學分析的架構

圖1. DataBricks的端到端基因組學分析的架構

Databricks Delta:實時大數據分析的統一管理係統Databricks平台已經致力於Beplay体育安卓版本解決當今研究人員所麵臨的數據治理,數據訪問和數據分析問題。和Databricks Delta湖,您可以在一個地方存儲所有基因組數據,並在攝入新數據時創建實時更新的分析。結合我們的優化基因組學的統一分析平台Beplay体育安卓版本(UAP4G)用於閱讀,寫入和處理基因組學文件格式,我們為基因組學管道工作流提供端到端解決方案。UAP4G架構提供靈活性,允許客戶插入自己的管道並開發自己的第三級分析。beplay体育app下载地址例如,我們突出顯示以下儀表板,顯示可以以自動的方式計算和呈現的質量控製度量和可視化,以滿足您的特定要求。

在此博客的其餘部分中,我們將通過我們采取的步驟來構建上麵的質量控製儀表板,將其實時更新,如樣品完成處理。通過使用基於Delta的管道來處理基因組數據,我們的客戶現在可以以提供實時樣本的方式運行其管道的方式。beplay体育app下载地址使用DataBricks筆記本(以及Github和MLFlow等集成),他們可以以確保其結果可重複的方式跟蹤和版本分析。他們的生物信息管理員可以減少維持管道的時間,並花費更多時間做出發現。我們將UAP4G視為發動機,這些發動機將從Ad-Hoc分析到生產基因組學的工業規模,從而能夠更好地了解遺傳和疾病之間的聯係。

閱讀示例數據

讓我們從讀取來自小型樣本隊列的變化數據開始;以下語句讀取特定示例的數據,並使用Databricks Delta格式保存它(在Delta_Stream_output文件夾中)。

spark.read。格式(“鑲木地板”)。\ load(“dbfs:/ annotations_etl_parquet / sampled =”+“srs000030_srr7099972”)。\ 寫。格式(“delta”)。\ save(delta_stream_outpath)

注意,Annotations_Etl_Parquet文件夾包含從中生成的注釋1000基因組數據集存儲在鑲木形格式。使用這些注釋的ETL和處理Databricks的基因組學統一分析平台Beplay体育安卓版本

開始流式傳輸Databricks Delta表

在以下語句中,我們正在創建exoMes apache spark dataframe,它使用databricks delta格式讀取數據的流(通過ReadStream)。這是一個持續運行的或動態dataframe,即,exoMes dataframe將加載新數據,因為數據被寫入delta_stream_output文件夾。要查看ExoMes DataFrame,我們可以運行DataFrame查詢以查找SambueID組分組的變體計數。

#讀取數據流exoMes = spark.readstream.format(“delta”)。load(delta_stream_outpath)#通過dataframe查詢顯示顯示數據(Exomes.groupby(“SampleId”)。count()。volumumnamed(“count”,“變體”)))

在執行時展示語句,Databricks筆記本提供了一個流儀表儀表板以監視流媒體作業。在流媒體作業下方的是顯示語句的結果(即Sample_id的變體計數)。

讓我們繼續通過根據我們的其他DataFrame查詢來回答我們的初始問題集exomes.dataframe。

單核苷酸變異計數

為了繼續實施例,我們可以快速計算下圖中顯示的單個核苷酸變體(SNV)的數量。

%SQL選擇ReferAlAllele,Count(1)由SNVS Group的GreseCounteAlle,GroupCount DESC排序

注意,這是展示命令是Databricks工作區的一部分,允許您使用Databricks可視化查看DataFrame(即,不需要編碼)。

變體計數

由於我們已經用功能效果注釋了我們的變體,因此我們可以通過查看我們看到的變體效應的傳播來繼續我們的分析。大多數變型檢測到蛋白質代碼的側麵區域,這些蛋白質被稱為非編碼變體。

顯示(ExoMes.groupBy(“MutationType”)。count())

氨基酸取代熱圖

繼續我們的exomes.DataFrame,讓我們用以下代碼片段計算氨基酸替換。類似於以前的DataFrame,我們將創建另一個動態數據幀(aa_counts.)因此隨著Exomes DataFrame處理新數據,隨後也將反映在氨基酸替代數中。我們還在將數據寫入內存(即.format(“記憶”))每60秒加工批次(即觸發(處理時間= '60秒'))所以下遊熊貓熱映射碼可以處理和可視化熱圖。

#計算氨基酸替換計數編碼= get_coding_mutations(exoMes)aa_substitutions = get_amino_acid_substutions(編碼。選擇(“蛋白質hgvs”),“protebhgvs”)aa_counts = count_amino_acid_substututute_combinations(aa_substitutions)aa_counts。\ writestream。格式(“內存”)。\ queryname(“amino_acid_substutions”)。\ outputmode(“完成”)。\觸發(處理時間= '60秒')。\ 開始()

以下代碼片段讀取前麵的amino_acid_substitutions.Spark表,確定最大數量,從火花桌上創建一個新的熊貓樞軸台,然後繪製出熱圖。

#使用pandas和matplotlib構建熱線映射amino_acid_substitutions = spark.read.table(“amino_acid_substutions”)max_count = amino_acid_substitutions.agg(fx.max(“替換”))。collect()[0] [0] aa_counts_pd = amino_acid_substitutizes.topandas()aa_counts_pd = pd.pivot_table(aa_counts_pd,值='替換',index = ['參考'],列= ['alternate'],fill_value = 0)圖,ax = plt.subplots()與sns.axes_style(“白色”):x = sns.heatmap(aa_counts_pd,vmax = max_count * 0.4,cbar = false,Annot = true,Annot_kws = {“size”:7},fmt =“d”)plt.tight_layout()顯示(無花果)

遷移到連續的管道

截至目前,前麵的代碼片段和可視化表示單個運行SampleId.。但是,由於我們使用的結構化流和DataBricks Delta,可以使用此代碼(無需任何更改)來構建生產數據流水線,以便將質量控製統計數據連續計算為樣本滾動我們的管道。要演示此功能,我們可以運行以下代碼片段,該代碼段將加載我們的整個數據集。

導入時間差別=“dbfs:/ databricks-datasets / genomics / annotations_etl_parquet /”文件= dbutils.fs.ls(省族)計數器= 0用於文件中的樣本:計數器+ = 1 annotation_path = sample.path sampled = annotation_path.split(“/")[4].split ("=")[1]變型= spark.read.format(“鑲木條”)。加載(str(annotation_path))打印(“運行”+ sampleId)if(sampleId!=“SRS000030_SRR709972“):Variants.Write.Format(”Delta“)。\ mode(“附加”)。保存(delta_stream_outpath)time.sleep(10)

如前麵的代碼片段中所述,源頭exomes.dataframe是加載到的文件delta_stream_output.文件夾。最初,我們已加載了一組單個文件SampleId.(IE。,SampleDID =“SRS000030_SRR709972”)。前麵的代碼片段現在采用所有生成的木質樣本(即par)逐步加載這些文件SampleId.進來delta_stream_output.文件夾。以下動畫GIF顯示了前一個代碼片段的縮寫輸出。

可視化您的基因組管道

當你滾動回到筆記本頂部時,您會注意到exomes.dataframe現在自動加載新的SampleIds.。因為我們的基因組管道管道的結構化流組件持續運行,所以它一旦將新文件加載到“中,就會處理數據delta_stream_outputpath.文件夾。通過使用Databricks Delta格式,我們可以確保數據流的交易一致性進入ExoMes DataFrame。

與我們的初步創造相反exomes.DataFrame,注意The結構化流監控儀表板是如何加載數據的(即,波動“輸入與處理速率”,波動“批量持續時間”,以及“聚合狀態”中的不同鍵的增加。作為exomes.dataframe正在處理,注意新行SampleIds.(和變體計數)。對於相關的相關的,也可以看到相同的行動通過突變類型查詢組

使用DataBricks Delta,任何新數據都在對我們的基因組管道的每一步進行事務一致。這很重要,因為它確保了您的管道是一致的(維護數據的一致性,即確保所有數據是“正確的”),可靠(事務成功或完全失敗),並且可以處理實時更新(能力要同時處理許多交易,任何故障的中斷不會影響數據)。因此,即使是我們下遊氨基酸替換圖中的數據(具有多個額外的ETL步驟)是無縫刷新的。

作為我們基因組學管道的最後一步,我們還通過審查DBFS內的DataMricks Delta Parquet文件來監測不同的突變(即隨著時間的推移隨著時間的推移的不同突變增加)。

概括

利用DataBricks統一分析平台的基礎 - 特別注重DataBricks Delta - 生物信息管理人員和Beplay体育安卓版本研究人員可以使用交易一致性應用分布式分析Databricks Genomics的統一分析平台Beplay体育安卓版本。這些抽象允許數據從業者簡化基因組管道。在這裏,我們創建了一種基因組樣本質量控製管道,隨著新樣本處理,無需手動幹預,將數據持續處理數據。無論您是執行ETL還是執行複雜的分析,您的數據都會迅速地通過基因組管道流動,而不會破壞。通過下載時自己嚐試自己用Databricks Delta筆記本簡化基因組學管道

在規模中開始分析基因組學:

致謝

謝謝永盛黃和邁克爾·奧爾塔的貢獻。

對開源Delta湖有興趣嗎?
訪問Delta Lake Online Hub要了解更多信息,請下載最新代碼並加入Delta Lake社區。

免費嚐試Databricks 開始

注冊

Baidu
map