pig强制转换(字符到整数):首位0怎么处理,‘01’到1的转化,
pig支持的类型转换(cast)
Pig Latin supports casts as shown in this table.
|
from / to |
bag |
tuple |
map |
int |
long |
float |
double |
chararray |
bytearray |
boolean |
|
|
bag |
error |
error |
error |
error |
error |
error |
error |
error |
error |
||
|
tuple |
error |
error |
error |
error |
error |
error |
error |
error |
error |
||
|
map |
error |
error |
error |
error |
error |
error |
error |
error |
error |
||
|
int |
error |
error |
error |
yes |
yes |
yes |
yes |
error |
error |
||
|
long |
error |
error |
error |
yes |
yes |
yes |
yes |
error |
error |
||
|
float |
error |
error |
error |
yes |
yes |
yes |
yes |
error |
error |
||
|
double |
error |
error |
error |
yes |
yes |
yes |
yes |
error |
error |
||
|
chararray |
error |
error |
error |
yes |
yes |
yes |
yes |
error |
yes |
||
|
bytearray |
yes |
yes |
yes |
yes |
yes |
yes |
yes |
yes |
yes |
||
|
boolean |
error |
error |
error |
error |
error |
error |
error |
yes |
error |
表中,将字符类型转化做int是可以的。
那么001 转化为int型后是1么?
测试如下
数据文件test_file.txt内容为:
1011,012
0111,100
0011,010
0001,010
1010,001
读入test_file.txt,将第一列的chararray类型数据,提取前三个字段,强制转换为int类型。
而第二列直接按int类型读入,看看首位0怎么处理
pig 代码:
%default testFile /user/wizad/test/lmj/test_file.txt
test_data = LOAD '$testFile' USING PigStorage(',')
AS
(str1:chararray,
number:int
);
dump test_data;
my_result = foreach test_data generate (int)SUBSTRING(str1,0,3);
dump my_result;
describe my_result;
--myts = sample g_log 0.0001;
--myts = limit g_log 10;
--dump myts;
--STORE myts INTO '/user/wizad/tmp/my' USING PigStorage(',');
运行结果
dump test_data:
(1011,12)
(0111,100)
(0011,10)
(0001,10)
(1010,1)
dump my_result:
(101)
(11)
(1)
(0)
(101)
可以看出首位0处理没有任何问题。
顺便一提:
debug或检查数据时,能用store,不用dump。要用dump就只用dump。我dump前,都先limit 10,只dump 10条数据
因为,dump会让某些multi-query execution失效。看起来像降低运行数据。
举例子:
两个脚本一个执行 A > B >DUMP
而另一个执行A > B > C > STORE
第一个脚本:
A = LOAD 'input'AS (x, y, z);
B = FILTER A BY x> 5;
DUMP B;
C = FOREACH BGENERATE y, z;
STORE C INTO'output';
store脚本:生成output1和output2两个文件,执行A > B > C > STORE
A = LOAD 'input'AS (x, y, z);
B = FILTER A BY x> 5;
STORE B INTO'output1';
C = FOREACH BGENERATE y, z;
STORE C INTO'output2';
我工作中,需要比较两个日志的ip,time,os,来识别是否是相同用户。而time需要判定5分钟内相同用户。所以我做了一个小处理,
将是时间从分钟切分:
time_extract = foreach cookie_data generate cookie_id,ip,SUBSTRING(time,0,13) as time,SUBSTRING(time,14,16) as minute1,os_id,os_version;
log_data = foreach click_log generate log_type,guid,ip,SUBSTRING(create_time,0,13) as time,SUBSTRING(create_time,14,16) as minute2,os_id,os_version;
然后,将两个relation按 time进行join,就是比较到小时的:
join_data = join time_extract by (ip,time,os_id), log_data by (ip,time,os_id);
在相同小时的记录中,找5分钟内的:
minute_compare = foreach join_data generate log_type,cookie_id,guid,(int)minute1,(int)minute2,time_extract::os_version,log_data::os_version;
same_users = filter minute_compare by (ABS(minute1-minute2) <= 5);
绝对值小于5的。
完成代码如下:
SET job.name 'mapping_from_mobile_to_pc';
SET job.priority HIGH;
REGISTER piggybank.jar;
DEFINE SequenceFileLoader org.apache.pig.piggybank.storage.SequenceFileLoader();
%default cleanedLog /user/wizad/data/wizad/cleaned/2014-11-{0[3-9],1[0-8]}/*/part*
%default cookieLog /user/wizad/tmp/ip_cookie.txt
%default output_path1 /user/wizad/tmp/mapping_cookie
%default output_path2 /user/wizad/tmp/edition_compare
cookie_data = LOAD '$cookieLog' USING PigStorage(',')
AS(cookie_id:chararray,
ip:chararray,
time:chararray,
os_id:chararray,
os_version:chararray
);
--test = limit cookie_data 100;
--dump test;
time_extract = foreach cookie_data generate cookie_id,ip,SUBSTRING(time,0,13) as time,SUBSTRING(time,14,16) as minute1,os_id,os_version;
describe time_extract;
origin_cleaned_data = LOAD '$cleanedLog' USING SequenceFileLoader
AS (ad_network_id:chararray,
wizad_ad_id:chararray,
guid:chararray,
id:chararray,
create_time:chararray,
action_time:chararray,
log_type:chararray,
ad_id:chararray,
positioning_method:chararray,
location_accuracy:chararray,
lat:chararray,
lon:chararray,
cell_id:chararray,
lac:chararray,
mcc:chararray,
mnc:chararray,
ip:chararray,
connection_type:chararray,
imei:chararray,
android_id:chararray,
android_advertising_id:chararray,
udid:chararray,
openudid:chararray,
idfa:chararray,
mac_address:chararray,
uid:chararray,
density:chararray,
screen_height:chararray,
screen_width:chararray,
user_agent:chararray,
app_id:chararray,
app_category_id:chararray,
device_model_id:chararray,
carrier_id:chararray,
os_id:chararray,
device_type:chararray,
os_version:chararray,
country_region_id:chararray,
province_region_id:chararray,
city_region_id:chararray,
ip_lat:chararray,
ip_lon:chararray,
quadkey:chararray);
click_log = filter origin_cleaned_data by log_type=='2';
log_data = foreach click_log generate log_type,guid,ip,SUBSTRING(create_time,0,13) as time,SUBSTRING(create_time,14,16) as minute2,os_id,os_version,device_type;
--join_data = join time_extract by ip, log_data by ip;
--join_data = join time_extract by (ip,time), log_data by (ip,time);
join_data = join time_extract by (ip,time,os_id), log_data by (ip,time,os_id);
minute_compare = foreach join_data generate log_type,cookie_id,guid,(int)minute1,(int)minute2,time_extract::os_version,log_data::os_version;
same_users = filter minute_compare by (ABS(minute1-minute2) <= 5);
--dump same_users;
describe same_users;
mapping_cookie_id = foreach same_users generate cookie_id,guid;
uniq_cookie_guid = distinct mapping_cookie_id;
store uniq_cookie_guid INTO '$output_path1' USING PigStorage(',');
os_edition = foreach same_users generate cookie_id,guid,SUBSTRING(time_extract::os_version,0,2) as os_ut,SUBSTRING(log_data::os_version,0,2) as os_mdm;
same_os_edition = filter os_edition by (os_ut == os_mdm) or (os_ut == 'x')or (os_mdm == 'x');
dump same_os_edition;
cookie_guid_with_edition = foreach same_os_edition generate cookie_id,guid;
uniq_c_g_editions = distinct cookie_guid_with_edition;
store uniq_c_g_editions INTO '$output_path2' USING PigStorage(',');
pig强制转换(字符到整数):首位0怎么处理,‘01’到1的转化,的更多相关文章
- TypeError: Error #1034: 强制转换类型失败:无法将 "0.49" 转换为 mx.graphics.IFill。
1.错误描述 TypeError: Error #1034: 强制转换类型失败:无法将 "0.49" 转换为 mx.graphics.IFill. at mx.charts.ser ...
- C++中类型强制转换
C++中强制类型转换有四种: 1.static_cast 格式:static_cast<Type>(Value); --用于基本类型间的转换,但不能用于基本类型指针间的转换: int i ...
- java代码---数据类型的强制转换----不懂啊
总结:看写的测试代码 字符到整型必须进行强制转换 package com.a.b; //byte→int 可以 int范围大,不必转换 B.short→long //C.float→double 这个 ...
- C语言中的字符和整数之间的转换
首先对照ascal表,查找字符和整数之间的规律: ascall 控制字符 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7 56 8 ...
- JavaScript学习笔记——数据类型强制转换和隐式转换
javascript数据类型强制转换 一.转换为数值类型 Number(参数) 把任何的类型转换为数值类型 A.如果是布尔值,false为0,true为1 B.如果是数字,转换成为本身.将无意义的后导 ...
- 简述Java变量和强制转换类型
简述Java变量和强制转换类型 java变量 1. java变量 变量:顾名思义,就是在java执行程序过程中可以发生改变的量,就好比方程式中的未知数X一样. 变量的内存分配过程 int a ; // ...
- Java数据类型的转换:隐式(自动)转换与强制转换
原文链接:http://java.chinaitlab.com/base/725590.html 一些初学JAVA的朋友可能会遇到JAVA的数据类型之间转换的苦恼,例如,整数和float,double ...
- python 查看帮助和变量的强制转换
查看帮助 dir() 函数 查看对象都有哪些属性和方法 用法:把要查询的对象写入()括号中即可 print(dir([])) (查看列表的方法) 执行: C:\Python27\python.exe ...
- PHP强制转换类型
PHP强制转换类型 获取数据类型 : 1.如果想查看某个表达式的值和类型,用var_dump(). 2.如果只是想得到一个易读懂的类型的表达方式用于调试,用 gettype().3.要查看某个类型 ...
随机推荐
- jquery选择器选取class
- MySQL备忘录
1 数据库概念(了解) 1.1 什么是数据库 数据库就是用来存储和管理数据的仓库! 数据库存储数据的优先: l 可存储大量数据: l 方便检索: l 保持数据的一致性.完整性: l 安全,可共享: l ...
- Bootstrap3 排版-缩略语
当鼠标悬停在缩写和缩写词上时就会显示完整内容,Bootstrap 实现了对 HTML 的 <abbr> 元素的增强样式.缩略语元素带有 title 属性,外观表现为带有较浅的虚线框,鼠标移 ...
- jboss规则引擎KIE Drools 6.3.0 Final 教程(1)
前言 目前世面上中文的KIE DROOLS Workbench(JBOSS BRMS)的教程几乎没有,有的也只有灵灵碎碎的使用机器来翻译的(翻的不知所云)或者是基于老版本的JBOSS Guvnor即5 ...
- 操作系统内核Hack:(一)实验环境搭建
操作系统内核Hack:(一)实验环境搭建 三四年前,心血来潮,入手<Orange's:一个操作系统的实现>学习操作系统内核,还配套买了王爽的<汇编语言(第二版)>和<80 ...
- Dynamics CRM Trigger plugin for N:N relationships
博客原文:https://demystifyingcrm.wordpress.com/2014/12/17/trigger-plugin-for-nn-relationships-in-dynamic ...
- Hexo写博客
hexo配置github Git Install hexo-deployer-git. $ npm install hexo-deployer-git –save 配置_config.yml文件 de ...
- everything of people’s life can changed in their twenties
还记得三年前,独自背着行李,流浪远方,来到曾经只在地理课本上才熟悉的北国,带着好奇,带着期望,带着激动的心情,想感受毛爷爷当年霸气的北国风光,千里冰封的美丽,想知道北方的面条到底有多少种花样,想走进那 ...
- 会声会影小成果分享(那段青春岁月)——校学习部宣传视频制作&生日祝福
大二的时候在校学习部当副部长,没有给干事们带去好的工作经验和管理方法,我净在折腾新媒体方面的东西,很惭愧的说,那时候申请了一个微信的公众号(HGXXB1314),我那时候以为自己很叼,最后是发现自己装 ...
- FFmpeg源代码简单分析:常见结构体的初始化和销毁(AVFormatContext,AVFrame等)
===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...