3

假设我有一个输入文件作为地图。

sample.txt
[1#"anything",2#"something",3#"anotherthing"]
[2#"kish"]
[3#"mad"]
[4#"sun"]
[1#"moon"]
[1#"world"]

由于没有指定键的值,我不想将其保存到文件中。是否有任何条件语句可以与 Store 关联?请帮我解决这个问题,以下是猪脚本。

A = LOAD 'sample.txt';
B = FOREACH A GENERATE $0#'5' AS temp;
C = FILTER B BY temp is not null;
-- It actually generates an empty part-r-X file
-- Is there any conditional statements i can include where if C is empty, Do not store ?
STORE C INTO '/user/logs/output';

谢谢 我在某个地方出错了吗?如果我错了,请纠正我。

4

1 回答 1

1

从编程猪的第 9 章,

Pig Latin 是一种数据流语言。与通用编程语言不同,它不包括控制流结构,如iffor

因此,仅使用 Pig 是不可能做到这一点的。

我倾向于说您可以使用 customStoreFunc和 custom的组合来实现这一点OutputFormat,但这似乎会增加太多开销。

解决此问题的一种方法是在没有写入记录的情况下删除输出文件。使用嵌入式 Pig并不太难。例如,使用 Python 嵌入:

from org.apache.pig.scripting import Pig

P = Pig.compile("""
A = load 'sample.txt';
B = foreach A generate $0#'5' AS temp;
C = filter B by temp is not null;
store C into 'output/foo/bar';
""")

bound = P.bind()
stats = bound.runSingle()

if not stats.isSuccessful():
    raise RuntimeError(stats.getErrorMessage())

result = stats.result('C')

if result.getNumberRecords() < 1:
    print 'Removing empty output directory'
    Pig.fs('rmr ' + result.getLocation())
于 2012-08-09T20:20:43.803 回答