Hive查询 - INSERT OVERWRITE LOCAL DIRECTORY为单个表创建多个文件

Har*_*ger 1 hive

我从hive表myTable中执行以下操作.

INSERT OVERWRITE LOCAL DIRECTORY'/ myDir/out'SELECT concat_ws('',NAME,PRODUCT,PRC,field1,field2,field3,field4,field5)FROM myTable;

因此,此命令在文件夹out /中生成2个文件000000_0和000001_0.

但是,我需要将内容作为单个文件.我该怎么办?

Ama*_*mar 6

目录中有多个文件,因为每个reducer都在写一个文件.如果您确实需要将内容作为单个文件,请仅使用1个reducer运行map reduce作业,该reducer将写入单个文件.

但是,根据您的数据大小,这可能不是运行单个reducer的好方法.

编辑:不是强制配置单元运行1减少任务并输出单个减少文件,最好使用hadoop fs操作将输出合并到单个文件.例如

hadoop fs -text /myDir/out/* | hadoop fs -put - /myDir/out.txt
Run Code Online (Sandbox Code Playgroud)


tan*_*ach 6

游戏晚了一点,但我发现使用LIMIT large_number,其中large_number大于查询中的行。它迫使蜂巢至少使用减速器。例如:

set mapred.reduce.tasks=1; INSERT OVERWRITE LOCAL DIRECTORY '/myDir/out' SELECT * FROM table_name LIMIT 1000000000

完美地工作。