У меня есть требование, когда я хочу записывать каждую отдельную запись в RDD в отдельный файл в HDFS.Spark: записывать каждую запись в RDD в отдельные файлы в каталоге HDFS
Я сделал это для нормальной файловой системы, но, очевидно, это не работает для HDFS.
stream.foreachRDD{ rdd =>
if(!rdd.isEmpty()) {
rdd.foreach{
msg =>
val value = msg._2
println(value)
val fname = java.util.UUID.randomUUID.toString
val path = dir + fname
write(path, value)
}
}
}
где записи это функция, которая записывает в файловую систему.
Есть ли способ сделать это внутри искры, так что для каждой записи я могу изначально записать в HDFS без использования каких-либо других инструментов, таких как Kafka Connect или Flume ??
EDIT: Больше Объяснение
Для например: Если мой DstreamRDD имеет следующие записи,
- ABCD
- EFGH
- IJKL
- MNOP
Мне нужны разные файлы для каждой записи, поэтому для файла «abcd» используется другой файл, отличный от «efgh» и т. Д.
Я попытался создать RDD внутри streamRDD, но я узнал, что это запрещено, поскольку RDD не сериализуемы.
Не могли бы вы предоставить рабочее решение или принять правильное решение. Это помогает другим людям, которые имеют аналогичную проблему. – Explorer
@LiveAndLetLive Я еще не нашел решение этой проблемы, и, как я упоминал в одном из предыдущих комментариев, мы перешли от хранения записи к хранению всего RDD с несколькими записями. Итак, этот вопрос все еще открыт. –
вы можете использовать свой собственный MultipleTextOutputFormat, см. Этот ответ: https://stackoverflow.com/a/26051042/609597 – softwarevamp