2015-06-28 2 views
1

Как я могу транслировать dstream, вычисленный над окном? Например, за последние 10 минут я нахожу подмножество строк, удовлетворяющих условию (назовите его send_events dstream). Мне нужно найти набор строк, удовлетворяющих другому условию (назовите его ack_events_for_send_events dstream) за последние 10 минут с помощью send_events dstream. Из-за большой перетасовки я не хочу groupbykey. Когда я делаю groupbykey, размер каждой группы очень мал, как максимум 10. Другими словами, у меня много групп (я не уверен, что это помогает оптимизировать мои операции. Просто хочу поделиться.)Вещание в искровом потоке

Пример:

id1, type1, time1 
id1, type2, time3 
id2, type1, time5 
id1, type1, time2 
id2, type2, time4 
id1, type2, time6 

Я хочу найти минимальную разницу во времени между type1 и type2 для каждого id. Каждый идентификатор имеет не более 10 строк, но у меня есть 10 000 идентификаторов в данном окне.

+0

Возьмите на взгляд к документации по широковещательных переменных [здесь] (https://spark.apache.org/docs/latest/programming-guide.html# широковещательные переменные), это довольно легко. Во всяком случае, из вашего описания я не уверен, какое правильное решение для вашей проблемы. Отправьте код, который у вас уже есть, если вы хотите получить более эффективный и конкретный ответ. – lrnzcig

+0

Я действительно прочитал документацию несколько раз. Внутри искры это легко понять. Я могу собрать RDD, а затем транслировать его, моя главная проблема - трансляция DStream, которая представляет собой серию RDD. Он должен быть простым, но функция сбора данных для DStreams отсутствует. Существует функция foreachRDD, которая может помочь, но я не мог понять, как использовать ее для сбора всех данных в DStream. Спасибо за ваш комментарий кстати. –

ответ

0

Возможно, следующее будет работать?

yourDStream.foreachRDD(somefunc) 

Тогда в SomeFunc:

def somefunc(rdd): 
    broadcastedList=sc.broadcast(rdd.collect()) 

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

  • Нет связанных вопросов^_^