GithubHelp home page GithubHelp logo

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. 使用部分列进行去重
--方式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想要撤销

  1. git reset --soft <commit_id>//先恢复到原先版本
  2. 完成需要的修改
  3. 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 photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.