云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

域名交易_汕头企业网站建设_超低折扣

小七 141 0

使用Spark SQL BGEN和VCF阅读器扩展基因组工作流

在过去的十年里,随着基因组测序的价格下降,可用的基因组数据量激增。研究人员现在能够在英国生物银行(ukbiobank)等项目的数十万人中扫描基因变异与疾病之间的关联。这些分析将有助于更深入地了解疾病的根源,从而为当今最重要的健康问题提供治疗。然而,分析这些数据集的工具并没有跟上数据增长的步伐。许多用户习惯于使用命令行工具,如plink或单节点Python和R脚本来处理基因组数据。但是,单节点工具在TB级及更高级别上是不够的。Broad Institute的Hail项目建立在Spark之上,将计算分发给多个节点,但它要求用户除了Spark之外还需要学习一个新的API,并鼓励以特定于Hail的文件格式存储数据。由于基因组数据的价值不是孤立的,而是作为结合不同来源(如医疗记录、保险索赔和医疗图像)的分析的输入,一个单独的系统可能会导致严重的并发症。我们相信sparksql已经成为处理各种不同风格的海量数据集的事实标准,它代表了通向简单、可伸缩的基因组工作流的最直接的途径。sparksql用于以分布式方式提取、转换和加载(ETL)大数据。ETL是生物信息学90%的工作,从提取突变,用外部数据源对其进行注释,到为下游统计和机器学习分析做准备。sparksql包含Python或R等语言的高级api,这些api易于学习,代码比传统的生物信息学方法更易于阅读和维护。在这篇文章中,我们将介绍在基因组数据和sparksql之间提供健壮、灵活连接的读者和作者。读取数据我们的读卡器被实现为Spark SQL数据源,因此VCF和BGEN可以像任何其他文件类型一样被读入Spark数据帧。在Python中,读取VCF文件的目录如下所示:火花。阅读\.格式("com.databricks.vcf网站")\.option("includeSampleId",True)\.option("flattenInfoFields",True)\.load("/databricks datasets/genomics/1kg vcfs")VCF头中定义的数据类型被转换为输出数据帧的模式。本例中的VCF文件包含许多可查询字段的注释:Spark SQL数据帧中VCF文件的内容应用于队列中每个样本的字段(如所谓的基因型)存储在一个数组中,这使得每个站点的所有样本能够快速聚合。每样本基因型字段的数组正如那些使用VCF文件的人所熟知的,VCF规范在数据格式上留下了模糊的空间,这可能会导致工具以意想不到的方式失败。我们的目标是创建一个健壮的解决方案,默认接受格式错误的记录,然后允许用户选择过滤条件。例如,我们的一个客户使用我们的阅读器接收有问题的文件,其中一些概率值存储为"nan",而不是大多数基于Java的工具所要求的"nan"。自动处理这些简单的问题可以让我们的用户专注于理解他们的数据意味着什么,而不是他们的格式是否正确。为了验证我们的阅读器的健壮性,我们对它进行了测试,测试的对象是通用工具GATK和Edico Genomics生成的VCF文件以及来自数据共享计划的文件。 英国生物银行倡议(ukbiobank initiative)分发的BGEN文件也可以进行类似的处理。读取BGEN文件的代码与我们的VCF示例几乎相同:spark.read.format("com.databricks.bgen网站").load(bgen_路径)这些文件读取器生成兼容的模式,允许用户编写适用于不同变异数据源的管道,并允许合并不同的基因组数据集。例如,VCF读取器可以获取一个包含不同信息字段的文件目录,并返回包含公共字段的单个数据帧。以下命令从BGEN和VCF文件中读取数据,并将它们合并以创建单个数据集:vcf_df=spark.read.format("com.databricks.vcf网站").load(vcf_路径)bgen_df=spark.read.format("com.databricks.bgen网站")\.schema(vcf_数据框模式).load(bgen_路径)big_df=vcf_df.联合我所有的基因型!!由于我们的文件读取器返回普通的Spark SQL数据帧,因此您可以使用Spark支持的任何编程语言(如Python、R、Scala、Java或纯SQL)摄取变量数据。专门的前端API,如考拉,它在apachespark上实现了pandas数据帧API,sparklyr也可以无缝地工作。操纵基因组数据由于每个变量级别的注释(VCF中的INFO字段)对应于一个DataFrame列,查询可以轻松地访问这些值。例如,我们可以计算次要等位基因频率小于0.05的双等位基因变体的数量:Spark 2.4引入了高阶函数,简化了对数组数据的查询。我们可以利用这个特性来操纵基因型的排列。要过滤基因型数组,使其只包含至少一个变异等位基因的样本,我们可以编写如下查询:用高阶函数处理基因型阵列 如果您的VCF文件有tabix索引,我们的数据源将把genomic Local上的过滤器推到索引中,并将I/O成本降到最低。即使数据集的增长超过了单台机器所能支持的大小,简单的查询仍然以交互速度完成。正如我们在讨论接收变体数据时提到的,Spark支持的任何语言都可以用来编写查询。以上语句可以组合成一个SQL查询:用SQL查询VCF文件 导出数据我们相信在不久的将来,组织将存储和管理他们的基因组数据,就像他们使用其他数据类型一样,使用像Delta-Lake这样的技术。但是,我们知道,与熟悉的文件格式保持向后兼容性对于与协作者共享或使用遗留工具非常重要。我们可以在过滤示例的基础上创建一个块gzip压缩VCF文件,该文件包含等位基因频率小于5%的所有变体:数据框。在哪里(外汇兑换("信息[0]