存储输出到单个CSV?

Jas*_*onA 14 apache-pig

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

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

Chr*_*ite 17

您可以通过以下几种方式实现此目的:

  • 要设置所有Pig操作的Reducer数,可以使用该default_parallel属性 - 但这意味着每一步都将使用一个reducer,从而降低吞吐量:

    set default_parallel 1;

  • 在调用STORE之前,如果其中一个操作执行的是(COGROUP,CROSS,DISTINCT,GROUP,JOIN(内部),JOIN(外部)和ORDER BY),那么您可以使用该PARALLEL 1关键字来表示使用单个reducer完成该命令:

    GROUP a BY grp PARALLEL 1;

有关详细信息,请参阅Pig Cookbook - 并行功能


小智 15

您还可以使用Hadoop的getmerge命令合并所有这些part-*文件.只有从Pig shell(而不是Java)运行Pig脚本时才可以执行此操作.

这比建议的解决方案更有优势:因为您仍然可以使用多个Reducer来处理数据,因此您的工作可能会运行得更快,特别是如果每​​个reducer输出的数据很少.

grunt> fs -getmerge  <Pig output file> <local file>
Run Code Online (Sandbox Code Playgroud)