目前,当我存储到HDFS时,它会创建许多部分文件。
有没有办法存储到单个CSV文件?
答案 0 :(得分:17)
您可以通过以下几种方式实现这一目标:
要设置所有Pig操作的Reducer数,可以使用default_parallel
属性 - 但这意味着每一步都将使用一个reducer,从而降低吞吐量:
set default_parallel 1;
在调用STORE之前,如果其中一个操作执行的是(COGROUP,CROSS,DISTINCT,GROUP,JOIN(内部),JOIN(外部)和ORDER BY),那么您可以使用{{1 }}关键字表示使用单个reducer来完成该命令:
PARALLEL 1
有关详细信息,请参阅Pig Cookbook - Parallel Features
答案 1 :(得分:15)
您还可以使用Hadoop的getmerge命令合并所有这些part- *文件。 只有从Pig shell(而不是Java)运行Pig脚本时才可以这样做。
这比建议的解决方案更有优势:因为您仍然可以使用多个Reducer来处理数据,因此您的工作可能会运行得更快,尤其是每个reducer输出的数据都很少。
grunt> fs -getmerge <Pig output file> <local file>