【发布时间】: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