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.要查看某个类型 ...
随机推荐
- js求和运算在可变参数的情况下ES3、ES5和ES6的写法区别
//ES3.ES5的写法 function foo(){ var arr = Array.prototype.slice.call(arguments); var sum = 0; arr.forEa ...
- 常见常用的CSS
字体属性:(font) 大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX.PD 样式 {font-style: obl ...
- 开源Spring解决方案--lm.solution
Github 项目地址: https://github.com/liumeng0403/lm.solution 一.说明 1.本项目未按java项目传统命名方式命名项目名,包名 如:org.xxxx. ...
- 决策树之ID3、C4.5
决策树是一种类似于流程图的树结构,其中,每个内部节点(非树叶节点)表示一个属性上的测试,每个分枝代表该测试的一个输出,而每个树叶节点(或终端节点存放一个类标号).树的最顶层节点是根节点.下图是一个典型 ...
- Android的四大组件及应用安装安全问题(4)
Android的四大组件及组件间通信 如果想对四大组件有深入的了解,那永远不要停留在一些条条干干的SDK API的认识,需要了解他的通讯,他的复用,他的边界问题,这样才会对四大组件有透明的认识. 四大 ...
- webpack 将不同类型的文件输出到不同文件夹
参考:https://stackoverflow.com/questions/33058964/configure-webpack-to-output-images-fonts-in-a-separa ...
- Minor GC、Major GC和Full GC之间的区别
在 Plumbr 从事 GC 暂停检测相关功能的工作时,我被迫用自己的方式,通过大量文章.书籍和演讲来介绍我所做的工作.在整个过程中,经常对 Minor.Major.和 Full GC 事件的使用感到 ...
- 20160208.CCPP体系详解(0018天)
程序片段(01):main.c 内容概要:PointWithOutInit #include <stdio.h> #include <stdlib.h> //01.野指针详解: ...
- android 自定义view之选座功能
效果图: 界面比较粗糙,主要看原理. 这个界面主要包括以下几部分 1.座位 2.左边的排数 3.左上方的缩略图 4.缩略图中的红色区域 5.手指移动时跟随移动 6.两个手指缩放时跟随缩放 主要技术点 ...
- HBase的环境配置及其应用
-------------------------------------------------------------------------------------- [版权申明:本文系作者原创 ...