MapReduce之简单K-mer计数

什么是K-mer计数

K-mer是一个长度为K(K>0)K(K>0)K(K>0)的子串,K-mer计数是指整个序列中K-mer出现的频度

K-mer计数应用

DNA序列中的K-mer计数在和多生物信息中都是一个非常重要的步骤,主要如下:

  • 确定序列读取之间的偏差是测序错误还是序列的基因差异
  • 修正短读组装错误
  • 计算亲缘度和特异度等参数

MapReduce解决方案

输入数据
@EAS54_6_R1_2_1_413_324
CCCTTCTTGTCCCCAGCGTTTCTCC
+
;;3;;;;;;;;;;;;7;;;;;;;88
@EAS54_6_R1_2_1_540_792
TTGGCAGGCCAAGGCCGATGGATCA
+
;;;;;;;;;;;7;;;;;-;;;3;83
@EAS54_6_R1_2_1_443_348
GTTGCTTCTGGCGTGGGTGGGGGGG
+EAS54_6_R1_2_1_443_348
;;;;;;;;;;;9;;;;.7;393333
@EAS54_6_R1_2_1_413_324
CCCCCCTTGTCTTCAGCCCTTCTCC
+
;;3;;;;;;;;;;;;7;;;;;;;88
@EAS54_6_R1_2_1_540_792
TTTTCAGGCCAAGGCCGATGGATCA
+
;;;;;;;;;;;7;;;;;-;;;3;83
@EAS54_6_R1_2_1_443_348
GTTGTTTCTGGCGTGGGTGGGGGGG
+EAS54_6_R1_2_1_443_348
;;;;;;;;;;;9;7;;.7;393333
@EAS54_6_R1_2_1_443_348
GTTGTTTCTGGCGTGGGTGGCCCCC
+EAS54_6_R1_2_1_443_348
;;;;;;;;;;;9;7;;.7;393333
map阶段任务

假如输入序列为CACACACAGT,且K=3,要统计3-mers个数,则会生成如下键-值对:
CAC 1
ACA 1
CAC 1
ACA 1
CAC 1
ACA 1
CAG 1
AGT 1

map阶段编码
package com.deng.Kmer;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;public class KmerCountMapper extends Mapper<LongWritable,Text, Text, IntWritable> {private final static IntWritable ONE=new IntWritable(1);private int k;private final Text kmerKey=new Text();public void setup(Context context){Configuration conf=context.getConfiguration();this.k=conf.getInt("k.mer",3);}public void map(LongWritable key,Text value,Context context) throws IOException, InterruptedException {String sequence=value.toString();for(int i=0;i<sequence.length()-k+1;i++){//如果这一行不存在DNA,跳过if(!Character.isLetter(sequence.charAt(0))) continue;String kmer=sequence.substring(i,k+i);kmerKey.set(kmer);context.write(kmerKey,ONE);}}
}
reducer阶段任务

对相同的键求和,如下
reducer输入
CAC 1
ACA 1
CAC 1
ACA 1
CAC 1
ACA 1
CAG 1
AGT 1
reducer输出
ACA 3
CAC 3
CAG 1
AGT 1

reducer阶段编码
package com.deng.Kmer;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;public class KmerCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int sum = 0;for(IntWritable value:values){sum+=value.get();}context.write(key,new IntWritable(sum));}
}
驱动程序如下
package com.deng.Kmer;import com.deng.util.FileUtil;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class KmerCountDriver {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {FileUtil.deleteDirs("output");Configuration conf=new Configuration();String[] otherArgs=new String[]{"input/k_mer.txt","output"};Job job=new Job(conf,"Kmer");job.setJarByClass(KmerCountDriver.class);job.setJobName("KmerCount");job.setMapperClass(KmerCountMapper.class);job.setReducerClass(KmerCountReducer.class);job.setMapOutputValueClass(IntWritable.class);job.setMapOutputKeyClass(Text.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);FileInputFormat.setInputPaths(job,new Path(otherArgs[0]));FileOutputFormat.setOutputPath(job,new Path(otherArgs[1]));System.exit(job.waitForCompletion(true)?0:1);}
}
运行结果如下

MapReduce之简单K-mer计数相关推荐

  1. Arduino与Proteus仿真实例-简单信号频率计数仿真

    简单信号频率计数仿真 Arduino 可用于测量电量(如电压.电流.功率等)或物理量(如温度.湿度.光强.湿度等)或电子元件值等. 本文将演示演示了如何使用 Arduino 测量脉冲的频率和占空比. ...

  2. 大数据之MapReduce并行算法简单概括

    MapReduce重点 程序员必须指定: map (k, v) → <k', v'>* reduce (k', v') → <k', v'>* 所有具有相同key的value被 ...

  3. MapReduce:简单介绍

    MapReduce是Google流行的一种并行编程技术. 它用于处理大量数据. 仅通过将工作并行分配给多台机器,就可以在合理的时间内完成这种处理. 每台机器都处理一小部分数据. MapReduce是一 ...

  4. C++实现的简单k近邻算法(K-Nearest-Neighbour,K-NN)

    C++实现的简单的K近邻算法(K-Nearest Neighbor,K-NN) 前一段时间学习了K近邻算法,对K近邻算法有了一个初步的了解,也存在一定的问题,下面我来简单介绍一下K近邻算法.本博客将从 ...

  5. mapreduce实现简单的K-M类聚

    2019独角兽企业重金招聘Python工程师标准>>> 上代码 首先是map public static class KMmap extends Mapper<LongWrit ...

  6. MapReduce的简单实例WordCount

    hadoop ---------------------------------------- 1.组成:common,hdfs,mapreduce,yarn 2.hadoop集群搭建:3种[搭建流程 ...

  7. python制作简单K线图

      最近在参加数模比赛,在培训课程中老师要求使用python完成对于K线图制作.参考了网上很多个博客,终于找到适合自己环境的在此记录下.   我使用的环境如下:      操作系统:windows10 ...

  8. MapReduce PLinq 简单示例

    转载于:https://www.cnblogs.com/Microshaoft/archive/2012/04/08/2437485.html

  9. 混合和可扩展的纠错算法,用于长读的插入缺失和替换错误

    混合和可扩展的纠错算法,用于长读的插入缺失和替换错误 Arghya Kusum Das, 萨彦·高斯瓦米( Sayan Goswami) 李基成& 承钟公园 BMC基因组学 卷 20,产品编号 ...

  10. RNAseq生信分析流程简介

    文章目录 RNAseq简介 RNAseq分析流程 1. 实验设计 1.1 目标RNA提取策略和文库类型选择 1.2 测序深度或文库大小 1.3 实验重复 2. RNAseq信息分析 2.1 质控 和 ...

最新文章

  1. 遗传算法的简单介绍以及模式定理的简单证明
  2. Python安装第三方库太慢?配置好这个速度飞起
  3. JavaScript 常用单词整理
  4. 一个小学教师建站的不惑与困惑
  5. Jenkins持续集成案例之-运维部署方式
  6. 苹果Mac矢量图形设计工具:Affinity Designer Beta
  7. python接口自动化代码_python接口自动化(十六)--参数关联接口后传(详解)
  8. 计算机图形学完整笔记(三):裁剪
  9. KITTI数据集下载链接
  10. 中国地图里暗藏的天机
  11. pdf工具类 (pd4ml)
  12. 大会没看够?2021 Google 开发者大会总结看这里!
  13. (九)DFI接口时序
  14. 王菲微博“逗贫”语录暴光
  15. redhat oracle环境变量配置文件,Redhat7.2(7.1)下oracle8.17的安装手册-数据库专栏,ORACLE...
  16. (1)在ensp上面进行静态路由和默认路由测试(直接上手)
  17. 奋斗吧,程序员——第十六章 笑渐不闻声渐悄,多情却被无情恼
  18. 转行成为大数据工程师要怎么做?
  19. excel自定义格式分钟计时_巧用EXCEL制作计时器
  20. 如何给U盘或移动硬盘分配固定盘符

热门文章

  1. 使用netstat命令统计established状态的连接数
  2. 俞敏洪沉默,新东方落泪
  3. 集群系统性能测试Linpack-HPL安装
  4. IPC Send timeout detected模拟和总结
  5. Source Insight 4.0.0086 Patched
  6. c# directory.getfiles按照文件名称
  7. 如何平衡CVR预估中的延迟反馈问题?(内含招聘)
  8. 【华为 OJ 】等差数列
  9. 新闻 - 被遗忘的“活化石”:BBS没落中求生
  10. bugku——宽带信息泄露(RouterPassView 查看路由器配置信息)