我有一份猪作业,它分析大量日志文件,并在一组属性和一包具有这些属性的ID之间生成关系。我想将这种关系存储在HDFS上,但是我希望以一种友好的方式对其他Hive / Pig / MapReduce作业进行操作,以便对数据或数据子集进行操作而无需完全摄取我的猪工作的输出,因为这是一个大量的数据。
例如,如果我的关系的架构类似于:
relation: {group: (attr1: long,attr2: chararray,attr3: chararray),ids: {(id: chararray)}}
我真的希望能够对这些数据进行分区,将其存储在一个看起来像这样的文件结构中:
/results/attr1/attr2/attr3/file(s)
其中路径中的attrX值是组中的值,并且文件仅包含id。这样我就可以轻松地对我的数据进行子集化,以便进行后续分析而无需重复数据。
即使使用自定义StoreFunc,这样的事情是否可行?我是否应采取不同的方法来实现这一目标?
我对猪很新,所以对我的方法的任何帮助或一般性建议都会非常感激。
提前致谢。
答案 0 :(得分:1)
Multistore并不适合我尝试做的事情,但事实证明它是如何编写自定义StoreFunc以编写多个分区输出文件的一个很好的例子。我下载了Pig源代码并创建了我自己的存储函数来解析组元组,使用每个项来构建HDFS路径,然后解析id包,每行写一个ID到结果文件中。