Я создал искровое задание, которое каждый день читает текстовый файл с моей hdfs и извлекает уникальные ключи из каждой строки текстового файла. В каждом текстовом файле примерно 50000 ключей. Затем те же данные фильтруются по извлеченному ключу и сохраняются в hdfs.
Я хочу создать в моем hdfs каталог со структурой: hdfs: //.../date/key, содержащий отфильтрованные данные. Проблема в том, что запись в hdfs занимает очень-очень много времени из-за большого количества ключей.
Как написано прямо сейчас:
val inputData = sparkContext.textFile(""hdfs://...", 2)
val keys = extractKey(inputData) //keys is an array of approx 50000 unique strings
val cleanedData = cleanData(inputData) //cleaned data is an RDD of strings
keys.map(key => {
val filteredData = cleanedData.filter(line => line.contains(key))
filteredData.repartition(1).saveAsTextFile("hdfs://.../date/key")
})
Есть ли способ сделать это быстрее? Я подумал о том, чтобы переразбить данные по количеству извлеченных ключей, но тогда я не могу сохранить в формате hdfs: //.../date/key. Я также пробовал groupByKey, но я не могу сохранить значения, потому что они не являются RDD.
Любая помощь приветствуется :)