询问火花摄入情况。 【JAVA]

时间:2018-05-05 01:09:29

标签: java apache-spark

我需要对以下查询提出建议。

我们在Amazon S3中存储了大量的zip文件。

Zip文件名模式是prefix_timestamp。

同名zipEntry只能出现在具有相同前缀的zip文件中。

处理数据的一种方法是创建newAPIHadoopFile,如下所示。

这里JavaPairRDD键是zipentry文件名,值是文件[zipEntry文件]的内容。

List<String> s3Keys = getS3Keys(); // list of s3 path to zip files

JavaPairRDD<Text, BytesWritable>  rddZipEntryFileNameToFile = sparkContext.newAPIHadoopFile(String.join(",", s3Keys), ZipFileInputFormat.class, Text.class, BytesWritable.class, sparkConfig);

...

...

rddZipEntryFileNameToProcessedData

我需要将reduceByKey应用于处理结果,因为同名zipEntry可以存在多个zip文件中。这给了我想要的结果。

例如:

//key is zipEntry file name
rddZipEntryFileNameToProcessedData.reduceByKey((v1, v2) -> {

                        v1.mergeValue(v2);
                        return v1;
                    })

出于性能原因,我正在寻找一些解决方案来避免reduceByKey和 要么在单个主机或分区中处理相同名称的zip条目文件。

例如:JavaPairRDD<Text, Lis<BytesWritable> > rddZipEntryFileNameToFiles

或者,如果我可以在一台主机上处理具有相同前缀的zip文件。

基本上我想利用同名的zipEntry可以是具有相同前缀的zip文件的一部分。

任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:0)

reduceByKey效率很高。只要有可能,它就会在同一节点中处理它,即如果spark将该分区分配给该节点。