【问题标题】:Combining two VCF files with differing sampleIds and locations结合两个具有不同 sampleId 和位置的 VCF 文件
【发布时间】:2021-09-30 10:40:43
【问题描述】:

早安,

如何将不同主题的多个变体调用文件 (VCF) 组合起来?

我有多个具有不同 sampleId 和位置的 VCF 数据集:

文件1:

contigName |start | end  | names | referenceAllele | alternateAlleles| qual| filters| splitFromMultiAllelic| genotypes
1          |792460|792461|["bla"]|G                |["A"]            |null|["PASS"] |false      | [{"sampleId": "abba", "phased": false, "calls": [0, 0]}]
1          |792461|792462|["blaA"]|G                |["A"]            |null|["PASS"] |false      | [{"sampleId": "abba", "phased": false, "calls": [0, 0]}]

文件2:

contigName |start | end  | names | referenceAllele | alternateAlleles| qual| filters| splitFromMultiAllelic| genotypes
1          |792460|792461|["bla"]|G                |["A"]            |null|["PASS"] |false      | [{"sampleId": "baab", "phased": false, "calls": [0, 0]}]
1          |792464|792465|["blaB"]|G                |["A"]            |null|["PASS"] |false      | [{"sampleId": "baab", "phased": false, "calls": [0, 0]}]

我需要将这些组合成单个 VCF 文件。由于数据安全,我需要在 DataBricks (pyspark/scala) 环境中工作。

Glow 文档有和想法,我模仿了:

import pyspark.sql.functions as F
spark.read.format("vcf")\
  .option("flattenInfoFields", True)\
  .load(file_list)\
  .groupBy('contigName', 'start', 'end', 'referenceAllele', 'alternateAlleles', 'qual', 'filters','splitFromMultiAllelic')\
  .agg(F.sort_array(F.flatten(F.collect_list('genotypes'))).alias('genotypes'))\
  .write.mode("overwrite").format("vcf").save(.my_output_destination ) 

这仅在两个文件中的 sampleId 相同时才有效:

写入行时任务失败

无法推断样本 ID,因为它们在每一行中都不相同。

我正在考虑为所有 ID 创建带有 NULL 调用的虚拟表,但这似乎很愚蠢。 (更不用说巨大的资源汇了。

有没有简单的方法来组合具有不同 sampleId 的 VCF 文件?还是使用 NULL 调用自动填充缺失值?

编辑:我设法用 bigVCF 格式做到了这一点。但是它会自动填充 -1,-1 调用。我想手动设置自动填充的值,因为它不是“真实的”

write.mode("overwrite").format("bigvcf").save(

【问题讨论】:

    标签: pyspark merge vcf-variant-call-format


    【解决方案1】:

    如果您在两个表中都有相同的变体,则上述代码有效。我不建议使用它来组合两个不同的数据集,因为这会引入批处理效果。

    合并两个数据集的最佳做法是使用相同的管道将它们从 BAM 文件重新处理为 gVCF。然后运行联合基因分型来合并样本(而不是自定义 spark-sql 函数)。

    Databricks 确实提供了一个 GATK4 最佳实践管道,其中包括联合基因分型。或者您可以使用 Deep 变体来调用突变。

    如果无法重新处理数据,则应在元分析中分别处理这两个数据集,而不是合并 VCF 并执行大型分析。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 2014-05-04
      • 1970-01-01
      • 2018-09-30
      • 2014-10-20
      相关资源
      最近更新 更多