Мне нужно предложение по запросу ниже.
В Amazon S3 хранится огромное количество zip-файлов.
Шаблон имени файла Zip - prefix_timestamp.
То же имя zipEntry может присутствовать только в файлах zip с тем же префиксом.
Один из способов обработки данных - создать новый APIHadoopFile, как показано ниже.
Здесь ключ 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
Мне нужно применить lowerByKey к обработанному результату, поскольку одноименное имя zipEntry может присутствовать в нескольких файлах zip. Это дает мне желаемый результат.
Ex:
//key is zipEntry file name
rddZipEntryFileNameToProcessedData.reduceByKey((v1, v2) -> {
v1.mergeValue(v2);
return v1;
})
По соображениям производительности я ищу какое-то решение, чтобы избежать ReduByKey и
либо обрабатывать файл записи zip с тем же именем на одном хосте или в разделе.
Пример: JavaPairRDD<Text, Lis<BytesWritable> > rddZipEntryFileNameToFiles
Или если я могу обрабатывать zip-файлы с одинаковым префиксом на одном хосте.
В основном я хочу воспользоваться тем, что zipEntry с тем же именем может быть частью zip-файлов с таким же префиксом.
Любое предложение приветствуется.