【发布时间】:2018-08-24 12:32:46
【问题描述】:
我正在尝试学习 Spark,到目前为止它进展顺利,除了我需要在值是列表的对 RDD 上使用 reduceByKey 或 combineByKey 等函数的问题。
我一直在尝试查找这些函数的详细文档,这些文档可以解释实际参数是什么,这样我就可以自己解决它而无需去 Stack Overflow,但我就是找不到任何好的 Spark 文档。我已经阅读了Learning Spark的第3章和第4章,但说实话,对最复杂的函数的解释非常糟糕。
我现在正在处理的问题如下:我有一个 RDD 对,其中键是字符串,值是两个整数元素的列表。像这样的东西:(国家,[小时,计数])。对于每个键,我希望只保留计数最高的值,而不考虑时间。一旦我有了上述格式的 RDD,我就会尝试通过在 Spark 中调用以下函数来找到最大值:
reduceByKey(lambda x, y: max(x[1], y[1]))
但这会引发以下错误:
TypeError: 'int' object is not subscriptable
这对我来说没有任何意义。我将参数 x 和 y 解释为两个键的值,例如x=[13, 445] 和 y=[14, 109],但随后错误没有任何意义。我做错了什么?
【问题讨论】:
-
My answer 到另一个问题可能有助于向您解释发生了什么。在您的情况下,它可能就像这样做一样简单:
reduceByKey(lambda x, y: (x[0], max(x[1], y[1]))) -
谢谢,这解决了我的问题!我会阅读您链接的答案。
标签: python apache-spark functional-programming pyspark documentation