blog's People
blog's Issues
pig 数据倾斜
pig中的数据倾斜也很烦人,因为数据的分布不均匀导致个别user的数据过大,分到同一个reducer上时,有很大的机率直接挂掉。
但是不要紧,pig中解决很简单。多两行代码。
简单来说就是平常hadoop streaming处理方式中加随机数一样。
我们group两次,第一次加随机数让数据分散然后做需要的任务,比如数据量过大的要截断,数据小的去除,构建新的数据结构等。
Example
test = LOAD 'test.data_table' USING org.apache.hive.hcatalog.pig.HCatLoader();
test = FILTER adclick BY (dt == '$FILTER_DATE');
test _user = FILTER test BY (user_pin is not null) AND (TRIM(user_pin) != '');
test _user = FOREACH test _user GENERATE (int)(RANDOM()*100) AS seed, user_pin, id AS id:chararray;
click_group = GROUP test _user BY (user_pin, seed);
click_group = FOREACH click_group GENERATE group.user_pin as user_pin, test _user as uuu, COUNT(test _user) AS Total:long;
click_group = FILTER click_group BY Total < (long)1000;
click_group = GROUP click_group BY user_pin;
click_group = FILTER click_group BY SUM(click_group .Total) < 1000;
click_group = FOREACH click_group {
ids = FOREACH click_group GENERATE FLATTEN(uuu) AS (seed, user_pin, id);
ids = FOREACH sku_ids GENERATE id;
GENERATE group AS user_pin, ids AS ids;
}
DUMP click_group
pig 中的 distinct
- 使用部分列进行去重
--方式1
A_unique =
FOREACH (GROUP A BY a4) {
b = A.(a1,a2,a3);
s = DISTINCT b;
GENERATE FLATTEN(s), group AS a4;
};
--方式12
-- Nested foreach grouping generates bags with same A,
-- limit bags to 1
my_table_distinct = FOREACH (GROUP my_table BY A) {
result = LIMIT my_table 1;
GENERATE FLATTEN(result);
}
git 进阶
查看git管理的文件
git ls-files
查看某个文件的详细修改记录: git log -p files
查看历史
git log —pretty=online filename
git log - - stat 仅显示区分文件
git log –follow -p file 查看一个文件的历史
git show 323445sdiafdsa 查看某次的详细情况
git log -p filename 该文件历史
比较
四种需求:
工作区和暂存区,git diff
暂存区和版本库,git diff --staged
工作区和版本库,git diff HEAD
当前分支和其他,git diff 分支名
后面可以加文件名
空格开头的是相同的,-是源文件,+比较文件
删除文件
git rm --cached readme.txt 只从stage中删除,保留物理文件
git rm readme.txt 不但从stage中删除,同时删除物理文件
git mv a.txt b.txt 把a.txt改名为b.txt
恢复删除文件
知道文件的名字
git checkout commit_id -- file_name
不知道文件的名字
查看删除的文件:git ls-files --deleted , 恢复 git checkout -- file_name
查看并恢复多个:git ls-files -d | xargs git checkout --
恢复被修改文件:git ls-files -m | xargs git checkout --
撤销类
单个文件
1.use "git reset HEAD ..." to unstage
如果已经用add 命令把文件加入stage了,就先需要从stage中撤销
然后再从工作区撤销
2.use "git checkout -- ..." to discard changes in working directory
git checkout a.txt 撤销a.txt的变动(工作区上的文件)
多个文件
git chenkout .
已经commit了
git commit --amend 来修改。这个只能修改最近上一次的,也就是用一个新的提交来覆盖上一次的提交。避免过多的commit,相当于将上次的commit内容改变
$ git reset --hard HEAD 放弃工作区和index的改动,HEAD指针仍然指向当前的commit.
这条命令同时还可以用来撤销还没commit的merge,其实原理就是放弃index和工作区的改动,因为没commit的改动只存在于index和工作区中。
$ git reset --hard HEAD^ 用来撤销已经commit的内容(等价于 git reset --hard HEAD~1) 。原理就是放弃工作区和index的改动,同时HEAD指针指向前一个commit对象。
git revert 也是撤销命令,区别在于reset是指向原地或者向前移动指针,git revert是创建一个commit来覆盖当前的commit,指针向后移动
提交到了github想要撤销
- git reset --soft <commit_id>//先恢复到原先版本
- 完成需要的修改
- git push origin master --force // 强行推覆盖错误操作
本地修改和远程合并
1 放弃修改:git reset --hard
2 提交
3 暂存 git stash
保持主线开发,避免过多的commit
git pull --rebase 这里表示把你的本地当前分支里的每个提交(commit)取消掉,并且把它们临时保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把本地当前分支更新 为最新的"origin"分支,最后把保存的这些补丁应用到本地当前分支上。
git fetch origim master
git rebase origin/master
git rebase -continue
git push
尽量使用rebase,保持开发主线。
git rebase -i commitID // 修改某些版本的内容/标题 git commit -amemd
module使用
需求:为了让公共的类库提供给多个项目使用,需要library怎和git在一起方便管理。
介绍:git submodule 是一个多项目使用共同类库的工具,他允许类库项目做为repository,子项目做为一个单独的git项目存在父项目中,子项目可以有自己的独立的commit,push,pull.
ref
使用:
下载 git clone --recurse-submodules -j8 git://github.com/foo/bar.git 或
git submodule update --init --recursive
添加 git submodule add [email protected]:jjz/pod-library.git pod-library
更新 git submodule foreach git pull
pig 中多层group + flatten 使用
t.txt
a1,b1,c1,0
a1,b2,c2,1
a2,b1,c2,3
a2,b1,c3,3
a2,b2,c1,2
a2,b1,c1,2
--一个经典任务,从B聚合,行数不变A中相同的内容Bag
a = load 't.txt' using PigStorage(',');-- AS(a:chararray, b:chararray, c:chararray, d:chararray);
A = GROUP a BY ($0..$2);
A = FOREACH A GENERATE group, a AS aaa;
B = GROUP A BY (group.$0,group.$1);
D = FOREACH B {
-- 下面这两个写法都行,但是不能用a,不知道原因会报错
-- wrong, u = FOREACH A GENERATE FLATTEN(aaa);
u = FOREACH A GENERATE FLATTEN(aaa);
u = FOREACH A GENERATE FLATTEN($1);
GENERATE u;
}
dump D
-----------------------------------------------------------------------------------------------
--从C聚合,解构更多层
a = load 't.txt' using PigStorage(',');-- AS(a:chararray, b:chararray, c:chararray, d:chararray);
A = GROUP a BY ($0..$2);
B = GROUP A BY (group.$0,group.$1);
--B = FOREACH B GENERATE group, A AS AAA;
C = GROUP B BY group.$0;
D = FOREACH C {
u = FOREACH B GENERATE FLATTEN($1);
u = FOREACH u GENERATE FLATTEN($1);
--GENERATE FLATTEN(u);
GENERATE u;
}
describe D
dump D
FLATTEN 一次最多两层,1次和2次最后生成的行数一致,都是解包一次(外层包长度数),不过把最内层的合并了着重看2次D的flatten
a = load 't.txt' using PigStorage(',');
A = GROUP a BY ($0..$2);
B = GROUP A BY (group.$0,group.$1);
C = GROUP B BY group.$0;
A: {group: (bytearray,bytearray,bytearray),a: {()}}
B: {group: (bytearray,bytearray),A: {(group: (bytearray,bytearray,bytearray),a: {()})}}
C: {group: bytearray,B: {(group: (bytearray,bytearray),A: {(group: (bytearray,bytearray,bytearray),a: {()})})}}
--A
((a1,b1,c1),{(a1,b1,c1,0)})
((a1,b2,c2),{(a1,b2,c2,1),(a1,b2,c2,0)})
((a2,b1,c1),{(a2,b1,c1,2)})
((a2,b1,c2),{(a2,b1,c2,3)})
((a2,b1,c3),{(a2,b1,c3,3)})
((a2,b2,c1),{(a2,b2,c1,2)})
--B
((a1,b1),{((a1,b1,c1),{(a1,b1,c1,0)})})
((a1,b2),{((a1,b2,c2),{(a1,b2,c2,1),(a1,b2,c2,0)})})
((a2,b1),{((a2,b1,c3),{(a2,b1,c3,3)}),((a2,b1,c2),{(a2,b1,c2,3)}),((a2,b1,c1),{(a2,b1,c1,2)})})
((a2,b2),{((a2,b2,c1),{(a2,b2,c1,2)})})
-- C
(a1,{((a1,b2),{((a1,b2,c2),{(a1,b2,c2,1),(a1,b2,c2,0)})}),((a1,b1),{((a1,b1,c1),{(a1,b1,c1,0)})})})
(a2,{((a2,b2),{((a2,b2,c1),{(a2,b2,c1,2)})}),((a2,b1),{((a2,b1,c3),{(a2,b1,c3,3)}),((a2,b1,c2),{(a2,b1,c2,3)}),((a2,b1,c1),{(a2,b1,c1,2)})})})
D = FOREACH C GENERATE FLATTEN($1);
D: {B::group: (bytearray,bytearray),B::A: {(group: (bytearray,bytearray,bytearray),a: {()})}}
-- D B 相同
((a1,b2),{((a1,b2,c2),{(a1,b2,c2,1),(a1,b2,c2,0)})})
((a1,b1),{((a1,b1,c1),{(a1,b1,c1,0)})})
((a2,b2),{((a2,b2,c1),{(a2,b2,c1,2)})})
((a2,b1),{((a2,b1,c3),{(a2,b1,c3,3)}),((a2,b1,c2),{(a2,b1,c2,3)}),((a2,b1,c1),{(a2,b1,c1,2)})})
D = foreach C GENERATE FLATTEN(B.$1);
D = foreach C GENERATE FLATTEN(B.A);
D: {null::A: {(group: (bytearray,bytearray,bytearray),a: {()})}}
({((a1,b2,c2),{(a1,b2,c2,1),(a1,b2,c2,0)})})
({((a1,b1,c1),{(a1,b1,c1,0)})})
({((a2,b2,c1),{(a2,b2,c1,2)})})
({((a2,b1,c3),{(a2,b1,c3,3)}),((a2,b1,c2),{(a2,b1,c2,3)}),((a2,b1,c1),{(a2,b1,c1,2)})})
E = FOREACH D GENERATE FLATTEN(A) as (a,b);
((a1,b2,c2),{(a1,b2,c2,1),(a1,b2,c2,0)})
((a1,b1,c1),{(a1,b1,c1,0)})
((a2,b2,c1),{(a2,b2,c1,2)})
((a2,b1,c3),{(a2,b1,c3,3)})
((a2,b1,c2),{(a2,b1,c2,3)})
((a2,b1,c1),{(a2,b1,c1,2)})
E = FOREACH D GENERATE FLATTEN(A.a);
({(a1,b2,c2,1),(a1,b2,c2,0)})
({(a1,b1,c1,0)})
({(a2,b2,c1,2)})
({(a2,b1,c3,3)})
({(a2,b1,c2,3)})
({(a2,b1,c1,2)})
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.