【问题标题】:how to load multiple text files in a folder in pig using load command?如何使用 load 命令在 pig 的文件夹中加载多个文本文件?
【发布时间】:2026-02-13 17:40:01
【问题描述】:

我一直用它来加载一个文本文件

A = LOAD '1try.txt' USING PigStorage(' ') as (c1:chararray,c2:chararray,c3:chararray,c4:chararray);

【问题讨论】:

标签: hadoop apache-pig


【解决方案1】:

你可以用文件夹名代替文件名,像这样:

A = LOAD 'myfolder' USING PigStorage(' ') 
    AS (c1:chararray,c2:chararray,c3:chararray,c4:chararray);

Pig 将加载指定文件夹中的所有文件,如Programming Pig 所述:

指定要从 HDFS 读取的“文件”时,可以指定目录。在这种情况下,Pig 将查找您指定的目录下的所有文件,并将它们用作该加载语句的输入。因此,如果您有一个目录输入,其中包含今天和昨天的两个数据文件,并且您将输入指定为要加载的文件,那么 Pig 将读取今天和昨天作为输入。如果您指定的目录有其他目录,这些目录中的文件也会被包括在内。

【讨论】:

  • 谢谢安德烈。我已经尝试过了,但我仍然收到一条错误消息,提示无法从目标目录读取数据。请问有什么建议吗?
  • 它对我有用。可能是,您使用了错误的目标目录路径?你是在本地模式还是 MapReduce 模式下使用 Pig?
  • 我在 Pig mapreduce 模式下使用,顺便说一下,我想知道在指定目录时我应该像这样“/user/asiapac/ssamykannu/user/asiapac/ssamykannu”还是“hdfs: //localhost:9100/user/asiapac/ssamykannu/user/asiapac/ssamykannu"。我在“ssamykannu”文件夹中存储了三个文本文件
  • "/user/asiapac/ssamykannu/user/asiapac/ssamykannu" 是很奇怪的路径。可能,您输入了两次路径,而真正的路径是“/user/asiapac/ssamykannu”。您可以使用hadoop fs -ls 命令检查这一点。如果您的 Hadoop 用户名是“asiapac”,那么您可以使用主目录“ssamykannu”的相对路径或完整路径“/user/asiapac/ssamykannu”。路径“hdfs://localhost/user/asiapac/ssamykannu”也可以。
  • 是的,这有点混乱,我尝试重新创建一个新文件夹并且它有效。非常感谢 AndreyS
【解决方案2】:

这里是官方 pig 文档的链接,表明你可以使用 load 语句来加载目录中的所有文件: http://pig.apache.org/docs/r0.14.0/basic.html#load

语法:LOAD 'data' [USING function] [AS schema];

其中:'data':文件或目录的名称,用单引号括起来。如果指定目录名,则加载目录中的所有文件。

【讨论】:

  • 你好,如果目录有很多子目录并且每个子目录有多个文件,语法是否也会加载所有文件?
【解决方案3】:
data = load '/FOLDER/PATH' using PigStorage(' ') AS (<name> <type>, ..);

data = load '/FOLDER/PATH' using HBaseStorage();

【讨论】: