使用PIG从一堆gzip压缩文件中抽取1000行

时间:2014-04-01 21:11:11

标签: hadoop apache-pig hdfs

我对Pig很新,所以我可能会以错误的方式解决这个问题。我在Hadoop的目录中有一堆gzip压缩文件。我试图从所有这些文件中抽取大约1000行。它不一定非精确,所以我想使用SAMPLESAMPLE需要对一条线进行采样的概率,而不是我需要的线数,所以我认为我应该计算所有这些文件中的行数而不是简单地将1000除以该计数并将其用作概率。这将起作用,因为我最后不需要精确的100行。这是我到目前为止所得到的:

raw = LOAD '/data_dir';
cnt = FOREACH (GROUP raw ALL) GENERATE COUNT_STAR(raw);
cntdiv = FOREACH cnt GENERATE (float)100/ct.$0;

现在我不确定如何使用cntdiv SAMPLE中的值。我尝试了SAMPLE raw cntdivSAMPLE raw cntdiv.$0,但它们无效。我可以在调用SAMPLE时使用该值吗?也许有更好的方法来完成我想要做的事情?

1 个答案:

答案 0 :(得分:1)

查看最初请求此功能的故障单中的说明:https://issues.apache.org/jira/browse/PIG-1926

我没有对此进行过测试,但看起来这应该可行:

raw = LOAD '/data_dir';
samplerate = FOREACH (GROUP raw ALL) GENERATE 1000.0/COUNT_STAR(raw) AS rate;
thousand = SAMPLE raw samplerate.rate;

重要的是按名称(rate)引用标量,而不是按位置($0)引用标量。