原文:http://wingmzy.iteye.com/blog/1260570

hadoop中的map-reduce是处理<key,value>这样的键值对,故指定<key,value>的分割符等参数可以分成三类:

map输出时分割符

分桶时的分隔符

reduce输出时的分割符

下面分别叙述:

1. map输出时分割符

参数:

stream.map.output.field.separator

作用:

指定map输出时的分割符

stream.num.map.output.key.fields

指定输出按照分隔符切割后,key所占有的列数

举例:

input数据:

2,2,c,c,c,c

参数配置:

-mapper "cat" # map 为分布式的cat命令

-reducer ""  #reduce为空 /

-jobconf stream.map.output.field.separator=','  /

-jobconf stream.num.map.output.key.fields=2 /

即按照','逗号分隔后,去前2列作为key

output数据:

2,2     c,c,c,c  #其中key为2,2  value为c,c,c,c

2. 分桶时的分隔符

map.output.key.field.separator

指定map输出<key,value>对之后,其中key内部的分割符

num.key.fields.for.partition

指定分桶时,按照分隔符切割后,用于分桶key所占的列数

举例:

map的output数据:

2,2     c,c,c,c

参数配置: 
-jobconf map.output.key.field.separator=',' / 
-jobconf num.key.fields.for.partition='1'   / 
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner /

output数据:

这样用于partition分桶的key就为:2

注意,这里分桶不应该用默认的HashPartitioner

3. reduce输出时的分割符

这个与map类似,分别用于reduce输出时分隔符以及key占有的列数

stream.reduce.output.field.separator

stream.num.reduce.output.key.fields

也可以通过代码实现,如下

mapreduce 默认情况下 key/value 分隔符为:“\t”
测试的输出如下:

我们可以在代码中进行设置来自定义 key/value 输出分隔符:在代码中添加如下一行代码:

conf.set("mapred.textoutputformat.separator", ";"); //此处以”;“作为分割符,后边介绍为什么这么修改

修改代码后,测试修改结果:

 
 

修改原因:
我们checkout   hadoop-1.2.1版本
打开文件:TextOutputFormat.java

 
 

我们可以看到如下一行代码:
    String keyValueSeparator= conf.get("mapred.textoutputformat.separator",
                                       "\t");
   代码的意思是:读取设置的key/value输出分隔符,如果没有读取到,默认使用 "\t"
   所以我们就在任务执行前设置名称为:mapred.textoutputformat.separator 的自定义值 即可

hadoop 指定 key value分隔符的更多相关文章

  1. 高效率遍历Map以及在循环过程中移除 remove指定key

    //高效率遍历Map以及在循环过程中移除 remove指定key //使用iter循环的时候 可以在循环中移除key,for在循环的过程中移除会报错哦 //本方法效率高 Iterator iter = ...

  2. 如何从二维数组中的多个key中获取指定key的值?

    精华 LOVEME96 2016-10-21 10:40:19 浏览(1512) 回答(3) 赞(0) 新手求教:二维数组中一般会有多个key,如果我们要获得指定key的值,应该怎么做? 问题标签: ...

  3. C++ map修改指定key的value

    对于修改C++指定key的value,网上查了很多,都说直接insert就会覆盖原来的值,是否是这样的呢?  C++ Code  12345678910111213141516171819202122 ...

  4. Flink 自定义source和sink,获取kafka的key,输出指定key

    --------20190905更新------- 沙雕了,可以用  JSONKeyValueDeserializationSchema,接收ObjectNode的数据,如果有key,会放在Objec ...

  5. 使用python同时替换json多个指定key的value

    1.如何同时替换json多个指定key的value import json from jsonpath_ng import parse def join_paths(regx_path,new_val ...

  6. Redis【知识点】批量删除指定Key

    Redis中有删除单条数据的命令DEL但是他没有批量删除多条数据的方法,那我们怎么去批量删除多条数据呢! 第一种方式 /work/app/redis/bin/redis-cli -a youpassw ...

  7. JDK8 HashMap--getTreeNode()获取红黑树指定key的节点

    /*获取红黑树的指定节点*/ final TreeNode<K,V> getTreeNode(int h, Object k) { return ((parent != null) ? r ...

  8. Hbase rest方式获取指定key范围内的值

    代码如下: <?php class Monitor_Hbase{ private $rest_host = "http://10.99.90.39:8130/";//rest ...

  9. PHP递归获取二维数组中指定key的值

    $data = [ "resulterrorCode" => 0, "resultraw" => [ "result" => ...

随机推荐

  1. ASSERT(m_hWnd == hWndOrig) - 解决之

    该问题产生的原因为:创建类型为regular dll 的MFC dll中的窗口创建与其它DLL或EXE中的窗口创建混乱. 比如:dll1 中函数 fun1() 调用 dll2 中函数 fun2(),在 ...

  2. JS HTML DOM---Document对象

    Document 对象 当浏览器载入 HTML 文档, 它就会成为 document 对象. document 对象是HTML文档的根节点与所有其他节点(元素节点,文本节点,属性节点, 注释节点). ...

  3. 参数Slave_IO_Running和Slave_SQL_Running的状态值解析

     Slave_SQL_Running: No mysql同步故障解决方法 2010-02-21 16:31:30 标签:mysql 双机 同步 数据库 休闲 原创作品,允许转载,转载时请务必以超链接形 ...

  4. <2013 12 01> 一篇很好的关于windows编程的入门指导(2013年末写的,比较前沿)

    我之前做了不少嵌入式开发,从单片机到ARM到RTOS到Linux等等,可以说走的是电气工程师的路线,对编程也是实用性的,跟计算机学院的科班套路不同.最近同学做一个windowsCE的项目请我帮忙,之前 ...

  5. Selenium:常见web UI元素操作及API使用

    链接(link) <div> <p>链接 link</p> <a href="www.cnblogs.com/tankxiao">小 ...

  6. Linux Debian 如何部署 Qt?

    Linux Debian 如何部署 Qt? 在这里以 HelloWorld 为例 目录结构如下: . ├── HelloWorld ├── HelloWorld.sh ├── imageformats ...

  7. MySQL中事务的分类

    从事务理论的角度来看,可以把事务分为以下几种类型 扁平事务(Flat Transactions) 带有保存点的扁平事务(Flat Transactions with Savepoints) 链事务(C ...

  8. Longest Common Prefix -最长公共前缀

    问题:链接 Write a function to find the longest common prefix string amongst an array of strings. 解答: 注意 ...

  9. Mybatis参数总结(转载)

    转载自: MyBatis传入多个参数的问题 mybatis传递参数总结 一.单个参数 1.基本数据类型 (1)直接使用 List<ChargeRuleDO> tests(long id); ...

  10. JDBC注册驱动程序的三种方式

    1. Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动 Class.forName("com.mysql.jdbc.Dri ...