原文: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. linux下不错的小软件

    1.Shutter截图软件 可以完成基本截图功能,而且还有图片编辑功能,可以涂鸦添加水印等. 以下的截图全部归功于shutter软件. 2.VLC media player 媒体播放器 3.Termi ...

  2. hdu4266(三维凸包模板题)

    /*给出三维空间中的n个顶点,求解由这n个顶点构成的凸包表面的多边形个数. 增量法求解:首先任选4个点形成的一个四面体,然后每次新加一个点,分两种情况: 1> 在凸包内,则可以跳过 2> ...

  3. 关于VUe的生命周期小小的理解

    实例化初始化->beforeCreate()->数据监测->事件配置->实例已经创建完成(created),在这一步,实例已完成以下的配置:数据观测(data observer ...

  4. Spring3.2.11与Quartz2.2.1整合时内存泄漏的问题的解决

    Quartz是一款定时任务调度的开源框架,使用起来比较方便.并且Spring的support包对Quartz有集成.但是笔者在web应用使用的过程中却遇到了内存泄漏的问题. 问题的产生 笔者在使用Sp ...

  5. Springboot 热部署中存在冲突的问题

    SpringBoot热部署有2中: 1.使用 Spring Loaded 2.使用 spring-boot-devtools 具体怎么用.自己百度! 在使用第一种时候,整合SpringBoot和通用M ...

  6. python系列二:python3基本数据类型

    #标准数据类型——number(数字)a, b, c = 1, 2.2, "hello"print(a, end = ", ")print(b, end = & ...

  7. 关于:before :after

    首先要明白一种思想:结构和样式分离. 结构和样式分离,就意味着:没有样式表,HTML文档也是一个完整的文档:没有样式表,也能正常阅读用HTML表达的所有内容.明白这种思想就能很好理解样式表中使用--- ...

  8. Servlet学习笔记【2】---Http数据包

    本文主要讲Http协议相关知识. 1 Http协议特点 单向性:客户端和服务端是单向通信的,只有客户端发请求,服务端才会响应产生.(异于推送模式) 无状态:协议本身并没有状态的记录,当客户端多次访问服 ...

  9. jQuery中获取特定顺序子元素(子元素种类不定)的方法

    提出问题:只已知父元素和父元素中子元素的次序,怎么通过jQuery方法获得该元素? <p>第一部分:</p> <ul> <li>1</li> ...

  10. /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15"" not found

    解决错误 呈现该错误的原因是当前的GCC版本中,没有GLIBCXX_3.4.15,须要安装更高版本. 我们可以输入:strings /usr/lib/libstdc++.so.6 | grep GLI ...