• 输入文件:fa格式的文件
  • 输出结果:kmer的频数和对应的kmer类型和计数
    1.将fq.gz的文件转换成fa文件:
#!/usr/bin/python env
# -*- coding:utf-8 -*-
import os
import re
import os.path
import gzip
import sys #在这里可以写一个函数用来将文件转换成id和序列对应的字典
#需要用到哪个转化操作呢?考虑先尝试使用filter或者map '''
@r261DFRAAXX100204:1:100:10494:3070/1
ACTGCATCCTGGAAAGAATCAATGGTGGCCGGAAAGTGTTTTTCAAATACAAGAGTGACAATGTGCCCTGTTGTTT
+
ACCCCCCCCCCCCCCCCCCCCCCCCCCCCCBC?CCCCCCCCC@@CACCCCCACCCCCCCCCCCCCCCCCCCCCCCC
''' #这里是利用python直接读取压缩的fastq文件
def read_gz_file(path):
if os.path.exists(path):
with gzip.open(path,'rt') as pf:
for line in pf:
yield line
else:
print 'the path [{}] is not exist!'.format(path) def ReadFastq(fastq):
flag = 1
dict_fq={}
if fastq.endswith('gz'):
con = read_gz_file(fastq)
if getattr(con,'__iter__','None'):
for line in con:
line=line.strip()
flag_index = flag%4
if flag_index == 1:
id = line
if flag%4 == 2:
seq = line
else:
flag +=1
continue
dict_fq[id] = seq
flag+=1
return dict_fq
else:
with open (fastq,'r') as fqr:
for line in fqr.readlines():
line = line.strip()
flag_index = flag%4
if flag_index == 1:
id = line
if flag%4 == 2:
seq = line
else:
flag +=1
continue
dict_fq[id] = seq
flag+=1
return dict_fq def convert_to_fa(dict_hash,output):
with open (output,'w') as fr:
for i in dict_hash.keys():
fr.write(i+'\n')
fr.write(dict_hash[i]+'\n') if __name__ == '__main__':
input = sys.argv[1]
output = sys.argv[2] dic_fa = ReadFastq(input)
convert_to_fa(dic_fa,output)

2.将reads打断成kmer并统计kmer的频数

#!/usr/bin/env python
# coding=utf-8
import os
import sys
import re
from pyspark import SparkConf, SparkContext input_fasta_file ='/home/yueyao/Spark/00.data/both.fa' conf = SparkConf().setMaster("local").setAppName("Yue Yao app")
sc = SparkContext(conf = conf)
fasta_file = sc.textFile(input_fasta_file) #这里是对fasta文件进行转化操作,过滤掉reads的名称
reads_fa = fasta_file.filter(lambda line :">" not in line) #这个函数用来将reads打断成kmer,这里的kmer是25,返回一个列表
def map_file(line):
seq_lis=[]
for i in range(len(line)-25+1):
sub_seq = line[i:i+25]
seq_lis.append(sub_seq)
return seq_lis kmer_list = reads_fa.flatMap(map_file)
#对打断的kmer进行计数
kmer_count = kmer_list.map(lambda id:(id,1))
kmer_total_count = kmer_count.reduceByKey(lambda a,b:(a+b))
#这里过滤掉了含有N的kmer
kmer_not_contain_N = kmer_total_count.filter(lambda line :"N" not in line[0])
kmer_key=kmer_not_contain_N.keys()
#统计kmer的种类,并计数
kmer_vari_count = kmer_not_contain_N.map(lambda kmer_vari:(kmer_vari[1],1))
kmer_histo = kmer_vari_count.reduceByKey(lambda a,b:(a+b))
#输出kmer频数的结果
kmer_histo.saveAsTextFile('Kmer25.histo')
kmer_not_contain_N.saveAsTextFile('kmer25')
kmer_key.saveAsTextFile('kmer25_key')
 
 
 
 

spark kmer计算的更多相关文章

  1. 如何在 Serverless K8s 集群中低成本运行 Spark 数据计算?

    作者 | 柳密 阿里巴巴阿里云智能 ** 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复"入门",即可获取 ...

  2. Spark入门实战系列--9.Spark图计算GraphX介绍及实例

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .GraphX介绍 1.1 GraphX应用背景 Spark GraphX是一个分布式图处理 ...

  3. Spark 实时计算整合案例

    1.概述 最近有同学问道,除了使用 Storm 充当实时计算的模型外,还有木有其他的方式来实现实时计算的业务.了解到,在使用 Storm 时,需要编写基于编程语言的代码.比如,要实现一个流水指标的统计 ...

  4. Spark将计算结果写入到Mysql中

    今天主要来谈谈如何将Spark计算的结果写入到Mysql或者其他的关系型数据库里面.其实方式也很简单,代码如下: package scala import java.sql.{DriverManage ...

  5. 基于Spark GraphX计算二度关系

    关系计算问题描述 二度关系是指用户与用户通过关注者为桥梁发现到的关注者之间的关系.目前微博通过二度关系实现了潜在用户的推荐.用户的一度关系包含了关注.好友两种类型,二度关系则得到关注的关注.关注的好友 ...

  6. Spark入门实战系列--7.Spark Streaming(下)--实时流计算Spark Streaming实战

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .实例演示 1.1 流数据模拟器 1.1.1 流数据说明 在实例演示中模拟实际情况,需要源源 ...

  7. 大数据计算平台Spark内核解读

    1.Spark介绍 Spark是起源于美国加州大学伯克利分校AMPLab的大数据计算平台,在2010年开源,目前是Apache软件基金会的顶级项目.随着 Spark在大数据计算领域的暂露头角,越来越多 ...

  8. 大数据计算新贵Spark在腾讯雅虎优酷成功应用解析

    http://www.csdn.net/article/2014-06-05/2820089 摘要:MapReduce在实时查询和迭代计算上仍有较大的不足,目前,Spark由于其可伸缩.基于内存计算等 ...

  9. 大数据计算平台Spark内核全面解读

    1.Spark介绍 Spark是起源于美国加州大学伯克利分校AMPLab的大数据计算平台,在2010年开源,目前是Apache软件基金会的顶级项目.随着Spark在大数据计算领域的暂露头角,越来越多的 ...

随机推荐

  1. CentOS 6.5开放端口方法

    lsof -i tcp:80   列出所有端口   netstat -ntlp   1.开启端口(以80端口为例)         方法一:            /sbin/iptables -I ...

  2. 7、vueJs基础知识07

    UI组件库 element-ui和mint-ui 其实都是借鉴了bootstrap bootstrap: 由twitter 开源 简洁.大方 官网文档https://www.bootcss.com/ ...

  3. 【Python 代码】3D TIF 拆成若干张tif (ISBI细胞数据集)

    from libtiff import * imgdir = TIFF3D.open("train-labels.tif") imgarr = imgdir.read_image( ...

  4. zabbix—自动发现端口并监控

    自动批量检查agent开放的端口 PS:如果服务器上的应用都是固定的,不会随机产生的都可以使用自动发现端口来监控:  如果服务器会随机出现端口且每次启动程序都会改变,可以采用第二种方法,来监控指定的端 ...

  5. python判断字符串包含关系

    转自---http://blog.csdn.net/yl2isoft/article/details/52079960 1.使用成员操作符 in >>> s='nihao,shiji ...

  6. [转]重命名PostgreSQL数据库

    初学PostgreSQL的朋友可能会有这样的疑惑:如何重命名已经建好的数据库?因为PostgreSQL默认的客户端pgAdmin III并没有地方可以让我们去修改某个现有的数据库的名称.遇到这个情况, ...

  7. Cesium原理篇:Material【转】

    https://www.cnblogs.com/fuckgiser/p/6171245.html Shader 首先,在本文开始前,我们先普及一下材质的概念,这里推荐材质,普及材质的内容都是截取自该网 ...

  8. revenue

    美 ['revənju]   英 ['revənjuː]   n.收益:营业额:税务署 网络收入:税收:岁入

  9. RNA剪接体 Spliceosome | 冷冻电镜 | 结构生物学

    冷冻电镜 为什么冷冻电镜 (Cryo-EM) 技术的发明可以获得2017诺贝尔化学奖?知乎看法 Press release: The Nobel Prize in Chemistry 2017 We ...

  10. 文献阅读 | Epigenetics in ENS development and Hirschsprung disease

    系列篇: Epigenetics in ENS development and Hirschsprung disease - Review Epigenetic Mechanisms in Hirsc ...