Могу ли я получить максимальный ключ каждого 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()