Могу ли я получить максимальный ключ каждого RDD в DStream?

Мне нужно найти самый большой ключ каждого RDD, но когда я использую Reduce (), я получу самый большой ключ во всем Dstream. Например, в этом потоке я хочу получить обратно (2,"b"),(2,"d"),(3,"f"), но я могу получить только (3, "f") от reduce(max)Как я могу получить (2,"b"),(2,"d"),(3,"f")?

sc = SparkContext(appName="PythonStreamingQueueStream")
ssc = StreamingContext(sc, 1)
stream = ssc.queueStream([sc.parallelize([(1,"a"), (2,"b"),(1,"c"),(2,"d"),
(1,"e"),(3,"f")],3)])

stream.reduce(max).pprint()
ssc.start()
ssc.stop(stopSparkContext=True, stopGraceFully=True)

1 ответ

Решение

Это:

stream = ssc.queueStream([sc.parallelize([(1,"a"), (2,"b"),(1,"c"),(2,"d"),
  (1,"e"),(3,"f")],3)])

создает поток только с одним пакетом, в котором первый и единственный пакет имеет (минимум) 3 раздела. Я думаю, вы хотите:

stream = ssc.queueStream([
    sc.parallelize([(1,"a"), (2,"b")]),
    sc.parallelize([(1,"c"), (2,"d")]), 
    sc.parallelize([(1,"e"), (3,"f")]), 
])

Что даст вам ожидаемый результат с:

stream.reduce(max).pprint()
Другие вопросы по тегам