2

我有一个具有相同格式的 csv 文件的 hdfs 文件列表。我需要能够将LOAD他们与猪一起。例如:

/path/to/files/2013/01-01/qwe123.csv
/path/to/files/2013/01-01/asd123.csv
/path/to/files/2013/01-01/zxc321.csv
/path/to/files/2013/01-02/ert435.csv
/path/to/files/2013/01-02/fgh987.csv
/path/to/files/2013/01-03/vbn764.csv

它们不能被地球化,因为它们的名字是“随机”散列并且它们的目录可能包含更多的 csv 文件。

4

2 回答 2

1

You aren't restricted to globbing. Use this:

LOAD '/path/to/files/2013/01-{01/qwe123,01/asd123,01/zxc321,02/ert435,02/fgh987,03/vbn764}.csv';

于 2013-08-16T16:04:52.913 回答
1

正如其他评论中所建议的,您可以通过预处理文件来做到这一点。假设您的 HDFS 文件名为file_list.txt,那么您可以执行以下操作:

pig -param flist=`hdfs dfs -cat file_list.txt | awk 'BEGIN{ORS="";}{if (NR == 1) print; else print ","$0;}'` script.pig

awk代码去掉了换行符并使用逗号分隔文件名。

在您的脚本(script.pig在我的示例中调用)中,您应该使用参数替换来加载数据:

data = LOAD '$flist';
于 2013-08-16T17:01:34.590 回答