我对Pig很新,所以我可能会以错误的方式解决这个问题。我在Hadoop的目录中有一堆gzip压缩文件。我试图从所有这些文件中抽取大约1000行。它不一定非精确,所以我想使用SAMPLE
。 SAMPLE
需要对一条线进行采样的概率,而不是我需要的线数,所以我认为我应该计算所有这些文件中的行数而不是简单地将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 cntdiv
和SAMPLE raw cntdiv.$0
,但它们无效。我可以在调用SAMPLE
时使用该值吗?也许有更好的方法来完成我想要做的事情?
答案 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
)引用标量。