原文: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. jconsole监控JVM

    1.查找catalina.sh,使用tomcat中的catalina.sh 目录地址/opt/apache-tomcat-7.0.82/bin 2.配置JAVA_OPTS JAVA_OPTS=&quo ...

  2. Kotlin——中级篇(一):类(class)详解

    在任何一门面向对象编程的语言里,类(class)是非常基础.但也是非常重要的一项组成,通俗的说就是万般皆对象,而所说的对象就是我们生成的类.Kotlin也是如此,下面详细为大家介绍Kotlin中的类的 ...

  3. 【BZOJ1190】[HNOI2007]梦幻岛宝珠 分层背包DP

    [BZOJ1190][HNOI2007]梦幻岛宝珠 Description 给你N颗宝石,每颗宝石都有重量和价值.要你从这些宝石中选取一些宝石,保证总重量不超过W,且总价值最大为,并输出最大的总价值. ...

  4. Sleep Buddies

    Sleep Buddies time limit per test 2.0 s memory limit per test 256 MB input standard input output sta ...

  5. Model的save方法的使用

    在使用类方法创建对象的时候发生save()总提示缺少self参数的错误: class BookInfo(models.Model): #创建书本信息类,继承models.Model booktitle ...

  6. “格式化HDFS后,HMaster进程启动失败”的问题解决

    用 hadoop namenode -fromat 格式化后,用./start-hbase.sh 启动HMaster和HRegionServer,但是过几秒种后HMaster进程自动关闭,HRegio ...

  7. sql server监控图解

  8. 《Mining of Massive Datasets》笔记(一)

    数据挖掘基本概念 数据挖掘定义 最广为接受得到定义是,数据挖掘是数据"模型"的发现过程.而"模型"却可以有多种含义. 1)统计建模 统计学家认为数据挖掘就是统计 ...

  9. django路由系统之反向生成url

    from niubin.service import v1 from django.urls import reverse from django.shortcuts import HttpRespo ...

  10. Python之函数2 嵌套,作用域和闭包(Day12)

    一.函数对象 1.函数是第一类对象,即函数可以当做数据传递 1.1 可以被引用 1.2 可以当做参数传递 1.3 返回值可以是函数 1.4 可以当做容器类型的元素 二.函数的嵌套 1.函数嵌套的调用: ...