猪存储的条件

时间:2012-08-09 07:48:08

标签: apache-pig

假设我输入的文件是map。

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';

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

1 个答案:

答案 0 :(得分:1)

来自Programming Pig的Chapter 9

  

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

因此,使用Pig只能做到这一点。

我倾向于说您可以使用自定义StoreFunc和自定义OutputFormat的组合来实现这一目标,但这似乎会增加额外开销。

解决此问题的一种方法是在没有写入记录的情况下删除输出文件。使用embedded 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())