2015-08-25 2 views
0

Я создаю приложение Spark Streaming, которое получает данные через SocketTextStream. Проблема состоит в том, что у данных с пометками есть несколько дубликатов. Я хотел бы удалить их на стороне искры (без предварительной фильтрации на стороне отправителя). Могу ли я использовать отдельную функцию JavaPairRDD через foreach DStream (я не могу найти способ, как это сделать) ??? Мне нужна «фильтрованная» Java (пара) DStream для последующих действий ...Удалить дубликаты из Spark JavaPairDStream/JavaDStream

Спасибо!

+0

Удаление дубликатов в потоке довольно сложно, вы можете сделать это только в окне данных. Не могли бы вы сохранить данные с помощью ключа в cassandra или в другом хранилище ключей? –

ответ

1

Метод .transform() может использоваться для выполнения произвольных операций на каждом временном разрезе RDD. Предполагая, что ваши данные являются строками:

someDStream.transform(new Function<JavaRDD<String>, JavaRDD<String>>() { 
     @Override 
     public JavaRDD<String> call(JavaRDD<String> rows) throws Exception { 
      return rows.distinct(); 
     } 
    }); 
+0

Метод tranform/transformToPair сделал это, спасибо! –

Смежные вопросы