我是猪的新手,我不知道该怎么去谷歌,因为我得到的结果并没有真正解决我的问题。
我现在拥有的是什么。
a = LOAD 'SOME_FILE.csv' using PigStorage(',') AS schema;
C = FOREACH B GENERATE $0, $1,$2 ;
STORE C into 'some storage' using PigStorage(';')
我想要做的是通过for循环运行它并将它们存储在同一个文件中。
我如何实现这一目标?谢谢。换句话说,我有SOME_FILE.csv,SOME_FILE_1.csv,SOME_FILE_2.csv等等。但我想通过相同的FOREACH语句运行它们,并且只运行一个STORE语句或至少将结果连接到相同的输出。
很抱歉,如果我不清楚这一点。
而不是'SOME_FILE_*.csv'
,我怎么把它全部写到同一个文件?在这种情况下,我需要处理的文件数量超过3个。
感谢。
答案 0 :(得分:2)
假设您的输入文件具有相同的架构:
a = LOAD 'SOME_FILE.csv' using PigStorage(',') AS schema;
b = LOAD 'SOME_FILE_1.csv' USING PigStorage(',') AS schema;
c = LOAD 'SOME_FILE_2.csv' USING PigStorage(',') AS schema;
您可以使用UNION来连接输入
a_b_c = UNION a,b,c;
C = FOREACH a_b_c GENERATE $0, $1,$2;
STORE C into 'some storage' using PigStorage(';');
答案 1 :(得分:0)
你可以用两种方式做事
1.use glob function for uploading multiple csv in same directory from hdfs and
glob功能
在hdfs中创建目录并将所有SOME_FILE _ * .csv放入hdfs中创建的目录
hadoop dfs -mkdir -p / user / hduser / data
将csv放入hdfs
中创建的目录中hadoop dfs -put /location_of_file/some_files*.csv / user / hduser / data
hadoop dfs -ls / user / hduser / data
使用
转到apache pig的grunt shellpig -x mapreduce
a = load'/ user / hduser / data / {SOME_FILE,SOME_FILE_1,SOME_FILE_2} .csv'使用PigStorage(',')作为架构;
转储a;