Исправлять потоки в python: ошибки в countByValue и countByValueAndWindow?

Я использую Spark 1.5.2 и Python 2.7 в среде Ubuntu.

Согласно документации о countByValue и countByValueAndWindow : преобразования на dstreams
Оконные операции

countByValue: Когда вызывается в DStream элементов типа K, возвращайте новый DStream (K, Long), где значение каждого ключа является его частотой в каждом RDD источника DStream.

countByValueAndWindow: при вызове пары DStream (K, V) возвращает новый DStream (K, Long), где значение каждого ключа является его частотой в скользящем окне. Как и в случае reduceByKeyAndWindow, количество сокращаемых задач настраивается с помощью необязательного аргумента.

Таким образом, в основном возвращаемое значение для этих двух функций должно быть списком (K, Long) пар , правильно?

Однако, когда я делал некоторые эксперименты, возвращаемое значение оказалось списком целых чисел, а не пар!

Более того, в официальных тестовых кодах Github для pySpark: Link1 Link2

Вы можете видеть, что «ожидаемые результаты» представляют собой список целых чисел ! И мне кажется, что он подсчитывает количество отдельных элементов и объединяет их все вместе.

Я думал, что неправильно понял документацию, пока не увидел тестовые коды Github для scala : Link1 Link2

Подобные тестовые примеры, но результаты представляют собой последовательность пар в это время!

Итак, в заключение, документация и тестовые примеры scala сказали нам, что результатом являются пары. Но тестовые примеры python и мои собственные эксперименты показали, что результатом являются целые числа.

Я новичок в PySpark и искрообразовании. Может ли кто-нибудь помочь мне немного объяснить эту несогласованность? Прямо сейчас я использую reduceByKey и reduceByKeyAndWindow в качестве обходного пути.

Рекомендации:

  1. PySpark потоковая документация о countByValue

  2. PySpark потоковая документация о countByVauleAndWindow

  3. Тесты Dpark для countByVauleAndWindow

  4. Пример использования countByValue в PySpark (не потоковая передача)


ОБНОВИТЬ

Эта ошибка будет исправлена ​​в pyspark 2.0.0

    Я согласен, у countByValueAndWindow есть ошибка, она должна возвращать count-by-value и не только счетчики без значения. Даже если вы запускаете один и тот же тестовый сценарий в Python по мере запуска версии Scala ( link ), вы можете увидеть, как версия этой функции pyspark возвращает только числа, а не те значения, которые они для (например, пары)

    >>> input = [['a'], ['b', 'b'], ['a', 'b']] >>> from pyspark.streaming import StreamingContext >>> ssc = StreamingContext(sc, 1) >>> input = [sc.parallelize(d, 1) for d in input] >>> input_stream = ssc.queueStream(input) >>> input_stream2 = input_stream.countByValueAndWindow(2, 1) >>> def f(rdd): ... rows = rdd.collect() ... for r in rows: ... print r ... >>> input_stream2.foreachRDD(f) >>> >>> sc.setCheckpointDir('/home/xxxx/checkpointdir') >>> ssc.start() >>> 1 2 2 2 0 

    Вы должны поднять это как ошибку в Jira ( link ), и это должно быть легко исправить. Я не вижу, как кто-либо мог использовать эту функцию в своей текущей форме, так как возвращаемые значения чисел не имеют смысла без ключей.