【发布时间】:2016-03-10 22:26:31
【问题描述】:
我在 Ubuntu 环境中使用 Spark 1.5.2 和 Python 2.7。
根据关于 countByValue 和 countByValueAndWindow 的文档:
Transformations on dstreams
Window operations
countByValue: 当在 K 类型元素的 DStream 上调用时,返回 (K, Long) 对的新 DStream,其中每个键的值是它在源 DStream 的每个 RDD 中的频率.
countByValueAndWindow: 当在 (K, V) 对的 DStream 上调用时,返回 (K, Long) 对的新 DStream,其中每个键的值是其在滑动窗口中的频率。和 reduceByKeyAndWindow 一样,reduce 任务的数量可以通过可选参数进行配置。
所以基本上这两个函数的返回值应该是(K,Long)对的列表,对吧?
然而,当我做一些实验时,返回值竟然是一个整数列表,而不是对!
更重要的是,在 Github 上用于 pySpark 的官方测试代码中: Link1Link2
您可以看到“预期结果”是整数列表!在我看来,它正在计算不同元素的数量并将它们组合在一起。
我以为我误解了文档,直到我在 Github 上看到 scala 的测试代码:Link1Link2
类似的测试用例,但此时的结果是成对序列!
总而言之,scala 的文档和测试用例告诉我们结果是成对的。但是python测试用例和我自己的实验表明结果是整数。
我是 PySpark 和火花流的新手。有人可以帮我解释一下这种不一致吗?现在我正在使用 reduceByKey 和 reduceByKeyAndWindow 作为解决方法。
参考资料:
更新
这个错误计划在 pyspark 2.0.0 中修复
【问题讨论】:
-
如果你在github上搜索“countByKeyAndWindow”,在python中只能找到一个地方使用了这个功能……不受欢迎还是因为bug?
-
我已将此作为错误提出:issues.apache.org/jira/browse/SPARK-12353
标签: python apache-spark pyspark spark-streaming