存储输出到单个CSV?

时间:2012-03-28 15:34:18

标签: apache-pig

目前,当我存储到HDFS时,它会创建许多部分文件。

有没有办法存储到单个CSV文件?

2 个答案:

答案 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>