我正在使用 Pig 的 MultiStorage 将输入文件拆分为许多较小的输出文件。
如果它有帮助,脚本看起来像:
<snip registers and defines>
a = load '$FILES' using AvroStorage();
a_projected = foreach a generate field1, field2;
a_explode = foreach a_projected generate field1, FLATTEN(TOKENIZE(field2));
--splitting based on field2
store a_explode into '$OUTPUT' using org.apache.pig.piggybank.storage.MultiStorage('$OUTPUT','1');
这是从 S3 读取和写入。'$FILES' 参数往往是单个文件夹,其中一个文件大约 10,000 行,大小约为 2 MB。
使用 MultiStorage 时,它会分成大约 4-5,000 个单独的文件夹,其中包含一个文件,运行大约需要 15 分钟。
使用 PigStorage 时,我得到了一个输出文件,正如预期的那样,运行大约需要 20 秒。
MultiStorage 会有这种性能吗?有什么可以改进的吗?