• 输入文件: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. (10)打鸡儿教你Vue.js

    事件处理器 <div id="app"> <button v-on:click="counter += 1">增加 1</butt ...

  2. mobx中的数组需要注意的地方

    mobx中如果将数组作为可观察. 可以通过添加修饰符observable或者调用observable方法. 很多的时候, 我们将此修饰为可观察的对象后, 就随处可用了. 比如,采用 map  forE ...

  3. 64位内核第三讲,Windbg的使用.以及命令

    目录 一丶驱动的调试. 1.线程 2.断点 3.内存查看命令 4.修改内存命令 5.栈相关操作命令 6.进程线程命令(内核命令) 一丶驱动的调试. 编写驱动免不了调试.所以这里介绍一下WinDbg的常 ...

  4. Chrome浏览器控制台[DOM] Password field is not contained in a form:

    [DOM] Password field is not contained in a form: ( [DOM]密码字段不包含在form表单中) 解决方案:添加一层form标签 <div cla ...

  5. [HackTheBox]WEB题目

    0x01 [50 Points] I know Mag1k 问题描述: Can you get to the profile page of the admin? 访问分配的地址,是一个带注册的登入页 ...

  6. 移动端滚动选择器mobileSelect.js

    一款多功能的移动端滚动选择器,支持单选到多选.支持多级级联.提供自定义回调函数.提供update函数二次渲染.重定位函数.兼容pc端拖拽等等.. 特性 原生js移动端选择控件,不依赖任何库 可传入普通 ...

  7. com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610, SQLERRMC=null

    写了一条sql,在db2数据库中可以执行,但是转换成mybatis的mapper文件后,在执行排序操作时报该错误. 我排序是这样写的 <if test="orderStr != nul ...

  8. BDD本质及与ATDD区别

    说起BDD,你会想到什么?   在刚接触BDD(Behavior Driven Development,行为驱动开发)的时候,我以为就是用Cucumber这样的工具来编写场景用例,从而实现自动化测试, ...

  9. php手记之07-tp5 cookie与session

    ThinkPHP采用 01-think\facade\Cookie类提供Cookie支持. 02-think\Cookie 配置文件位于 config/cookie.php中,一般会配置一个超时时间. ...

  10. Qt *.pro工程文件 详解

    先介绍一下QT中关于项目的相关介绍 app - 建立一个应用程序的makefile.这是默认值,所以如果模板没有被指定,这个将被使用. lib - 建立一个库的makefile. vcapp - 建立 ...