假设我输入的文件是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';
由于 我在某个地方出错了吗?如果我错了,请纠正我。
答案 0 :(得分:1)
来自Programming Pig的Chapter 9,
Pig Latin是一种数据流语言。与通用编程语言不同,它不包括
if
和for
等控制流结构。
因此,使用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())