Ali*_*afa 0 python documentation functional-programming apache-spark pyspark
我正在尝试学习 Spark,到目前为止一切进展顺利,除了我需要在值为列表的一对 RDD 上使用像reduceByKey或combineByKey这样的函数的问题。
我一直在尝试找到这些函数的详细文档,这些文档可以解释参数的实际含义,这样我就可以自己解决它,而无需去 Stack Overflow,但我就是找不到任何好的 Spark 文档。我读过《Learning Spark》的第3章和第4章,但说实话,对于最复杂的函数的解释非常糟糕。
我现在正在处理的问题如下:我有一对 RDD,其中键是字符串,值是两个元素的列表,这两个元素都是整数。像这样的东西:(国家,[小时,计数])。对于每个键,我希望仅保留计数最高的值,无论时间如何。一旦我有了上述格式的 RDD,我就会尝试通过调用 Spark 中的以下函数来查找最大值:
reduceByKey(lambda x, y: max(x[1], y[1]))
Run Code Online (Sandbox Code Playgroud)
但这会引发以下错误:
TypeError: 'int' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)
这对我来说没有任何意义。我将参数 x 和 y 解释为两个键的值,例如 x=[13, 445] 和 y=[14, 109],但错误没有任何意义。我究竟做错了什么?
假设你有[("key", [13,445]), ("key", [14,109]), ("key", [15,309])]
当它传递给 时reduceByKey,它将把具有相同键的所有值分组到一个执行器中,即[13,445], [14,109], [15,309]并在值之间进行迭代
在第一次迭代xis[13,445]和yis中[14,109],输出是max(x[1], y[1])ie max(445, 109),即445
在第二次迭代中,即前一个循环的最大值x是445y[15,309]
x现在,当尝试通过 获取 的第二个元素x[1]且445只是 an 时integer,会发生错误
类型错误:“int”对象不可下标
我希望错误的含义是清楚的。您可以在我的另一个答案中找到更多详细信息
上面的解释也解释了为什么@pault在评论部分提出的解决方案有效,即
reduceByKey(lambda x, y: (x[0], max(x[1], y[1])))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3366 次 |
| 最近记录: |