我有一个pig任务,它分析大量的日志文件,并在一组属性和一包具有这些属性的id之间生成一个关系。我希望将这种关系存储在hdfs上,但我希望这样做的方式对其他hive/pig/mapreduce作业操作数据或数据子集是友好的,而不必摄取pig作业的全部输出,因为这是一个很大的数据量。
例如,如果我的关系模式类似于:
relation: {group: (attr1: long,attr2: chararray,attr3: chararray),ids: {(id: chararray)}}
我非常希望能够对这些数据进行分区,将其存储在一个文件结构中,该文件结构如下所示:
/results/attr1/attr2/attr3/file(s)
其中路径中的attrx值是组中的值,并且文件仅包含id。这将允许我轻松地将数据子集,以便在不复制数据的情况下进行后续分析。
即使使用自定义的storefunc,这样的事情也可能发生吗?我是否应该采取不同的方法来实现这个目标?
我是一个新的Pig,所以任何帮助或一般建议,我的方法将不胜感激。
提前谢谢。
1条答案
按热度按时间nqwrtyyt1#
multistore并不是一个完美的例子,但它证明了如何编写一个自定义storefunc来编写多个分区输出文件。我下载了pig源代码并创建了自己的存储函数,该函数解析组元组,使用每个项构建hdfs路径,然后解析id包,将每行一个id写入结果文件。