我正在使用aws .net sdk向EMR运行s3distcp作业,以使用--groupBy arg连接文件夹中的所有文件。但无论我尝试过什么“groupBy”arg,它都会一直失败,或者只是复制文件而不连接,就像在arg列表中没有指定--groupBy一样。
文件夹中的文件是spark saveAsTextFiles,其名称如下所示:
部分-0000
部分0001
部分-0002
...
...
step.HadoopJarStep = new HadoopJarStepConfig
{
Jar = "/usr/share/aws/emr/s3-dist-cp/lib/s3-dist-cp.jar",
Args = new List<string>
{
"--s3Endpoint=s3-eu-west-1.amazonaws.com",
"--src=s3://foo/spark/result/bar" ,
"--dest=s3://foo/spark/result-merged/bar",
"--groupBy=(part.*)",
"--targetSize=256"
}
};
答案 0 :(得分:7)
在经历了这一整天的挣扎之后,最终我得到了它与groupKey arg合作:
--groupBy=.*part.*(\w+)
但即使我将--targetSize=1024
添加到args s3distcp也会生成2,5MB - 3MB文件。
有没有人对它有任何想法?
** *更新* **
这是groupBy子句,它将所有文件连接到一个文件中,位于自己的文件夹中:
.*/(\\w+)/.*
最后一个“/”在这里非常重要 --source =“s3:// foo / spark / result /”
“result”文件夹中有一些文件夹:
s3://foo/spark/result/foo
s3://foo/spark/result/bar
s3://foo/spark/result/lorem
s3://foo/spark/result/ipsum
在上面的每个文件夹中有数百个文件,如:
part-0000
part-0001
part-0002
.*/(\\w+)/.*
这个group by子句对每个文件夹中的每个文件进行分组,所以最后每个文件夹都有一个文件夹名为
s3://foo/spark/result-merged/foo/foo -> File
s3://foo/spark/result-merged/bar/bar -> File
s3://foo/spark/result-merged/lorem/lorem -> File
s3://foo/spark/result-merged/ipsum/ipsum -> File
所以,这对我来说是最后的工作命令:
s3-dist-cp --src s3://foo/spark/result/ --dest s3://foo/spark/results-merged --groupBy '.*/(\\w+)/.*' --targetSize 1024
感谢。