Я использую Spark 1.6.0 с Cloudera 5.8.3.
У меня есть DStream
объект и множество преобразований, определенных на нем,В Spark Streaming, есть ли способ обнаружить, когда партия закончилась?
val stream = KafkaUtils.createDirectStream[...](...)
val mappedStream = stream.transform { ... }.map { ... }
mappedStream.foreachRDD { ... }
mappedStream.foreachRDD { ... }
mappedStream.map { ... }.foreachRDD { ... }
Есть ли способ, чтобы зарегистрировать последний foreachRDD
, который гарантированно будет выполнена последней, и только если вышеуказанные foreachRDD
s закончили выполнение?
Другими словами, когда пользовательский интерфейс Spark показывает, что задание было завершено - вот когда я хочу выполнить легкую функцию.
Есть ли что-то в API, которое позволяет мне это достичь?
Благодаря
Просто интересно, можете ли вы перестроить код таким образом, чтобы вся логика, выполняемая над 'mappedStream', выполнялась в одном одиночном foreachRDD, включая карту на последней строке? Просто 'foreachRDD' не является преобразованием. А карта на DStream эквивалентна созданию карты на каждом rdd в foreachRDD? Если это имеет смысл? – ImDarrenG
В конце дня я мог бы, возможно, сузить его до одного 'foreachRDD', а затем« last 'foreachRDD» было бы довольно просто реализовать. Тем не менее, у меня есть несколько источников с разными конвейерами данных, определенными для них. Реализация имеет основной класс, который считывает конфигурацию и создает источники соответственно (источники Kafka действительно), и каждый источник проходит через другой конвейер данных - то есть класс, который определяет, как должен обрабатываться поток. Я хочу обнаружить готовые партии в основном классе, независимо от преобразований, определенных в классах конвейера. –