hadoop 指定 key value分隔符
原文: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分隔符的更多相关文章
- 高效率遍历Map以及在循环过程中移除 remove指定key
//高效率遍历Map以及在循环过程中移除 remove指定key //使用iter循环的时候 可以在循环中移除key,for在循环的过程中移除会报错哦 //本方法效率高 Iterator iter = ...
- 如何从二维数组中的多个key中获取指定key的值?
精华 LOVEME96 2016-10-21 10:40:19 浏览(1512) 回答(3) 赞(0) 新手求教:二维数组中一般会有多个key,如果我们要获得指定key的值,应该怎么做? 问题标签: ...
- C++ map修改指定key的value
对于修改C++指定key的value,网上查了很多,都说直接insert就会覆盖原来的值,是否是这样的呢? C++ Code 12345678910111213141516171819202122 ...
- Flink 自定义source和sink,获取kafka的key,输出指定key
--------20190905更新------- 沙雕了,可以用 JSONKeyValueDeserializationSchema,接收ObjectNode的数据,如果有key,会放在Objec ...
- 使用python同时替换json多个指定key的value
1.如何同时替换json多个指定key的value import json from jsonpath_ng import parse def join_paths(regx_path,new_val ...
- Redis【知识点】批量删除指定Key
Redis中有删除单条数据的命令DEL但是他没有批量删除多条数据的方法,那我们怎么去批量删除多条数据呢! 第一种方式 /work/app/redis/bin/redis-cli -a youpassw ...
- JDK8 HashMap--getTreeNode()获取红黑树指定key的节点
/*获取红黑树的指定节点*/ final TreeNode<K,V> getTreeNode(int h, Object k) { return ((parent != null) ? r ...
- Hbase rest方式获取指定key范围内的值
代码如下: <?php class Monitor_Hbase{ private $rest_host = "http://10.99.90.39:8130/";//rest ...
- PHP递归获取二维数组中指定key的值
$data = [ "resulterrorCode" => 0, "resultraw" => [ "result" => ...
随机推荐
- Django项目笔记:sessions处理以及复杂对象序列化
前言:一点题外话 我发现,不更新博客的时候,不是非常忙,就是效率非常低.最近没怎么更新博客,原因是第二种= =.惭愧惭愧. 今天效率出奇的高,一天时间把PassNote后端的接口全部写完了,Djang ...
- Win MYSQL5.7.19压缩版安装
最近需要在wins上安装MYSQL,发现最新的版本和之前的有点差距,再次记录一下 1.下载:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5. ...
- Scanner类与Random类
1.Scanner类 Scanner类的作用是获得输入,下面代码用于获得用户的键盘输入,实例如下: 常用方法: String next():将输入信息的下一个标记扫描为一个字符串 Int nextIn ...
- hoj 2739 中国邮局问题
/*若原图的基图不连通, 或者存在某个点的入度或出度为 0 则无解. 统计所有点的入度出度之差 Di, 对于 Di > 0 的点, 加边(s, i, Di, 0); 对于 Di < 0 的 ...
- cmake编译选项
1 需求 现在已经有一个cmake工程,我想要添加-O0 -g,生成gdb的调试信息和不进行代码优化. 也就是说,我该怎样修改CFLAGS和CPPFLAGS? 2 在project后面添加 set(C ...
- 判断SQL数据库中函数、存储过程等是否存在的方法
下面为您介绍sql下用了判断各种资源是否存在的代码,需要的朋友可以参考下,希望对您学习sql的函数及数据库能够有所帮助.库是否存在if exists(select * from master..sys ...
- 涉及到复制和二进制日志中的选项和变量-Replication and Binary Logging Options and Variables
在搭建复制中,有些参数需要我们留意,在这里罗列出来,供大家参考一下,以GTID为基础 --server-id server-id:这是一个全局的可动态调整的变量,取值范围为0-4294967295,也 ...
- python多进程理论
什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行): 你在一个时间段内有很多任务要做:python学习的任务,赚钱的任务,交女朋 ...
- python cookbook第三版学习笔记二十:可自定义属性的装饰器
在开始本节之前,首先介绍下偏函数partial.首先借助help来看下partial的定义 首先来说下第一行解释的意思: partial 一共有三个部分: (1)第一部分也就是第一个参数,是一个函数, ...
- [Idea]安装avtiviti插件以及 插件中文乱码
安装插件 打开IDEA,按ctrl+alt+S,打开Pluging 乱码问题 idea 安转activiti插件后,编辑流程图发现保存后中文乱码,并且idea的字符集(Settings—>Edi ...