PySpark 函数在 mapValues 和过滤器之间表现不同
PySpark function behaving different between mapValues and filter
我正在使用 pyspark 在 spark 中工作。当我使用
下面的 lambda 时,我有一个格式为 [(key, (num, (min, max, count))),....]
的 rdd
t = fullBids.filter(lambda (value, stats): (stats[2] > 10 and stats[0] < value and value < stats[1]))
它出错了
tuple index out of range
但是当我在 mapValues 调用中使用它时,它运行成功,正确返回 True 或 False。
ti = fullBids.mapValues(lambda (value, stats): (stats[2] > 10 and stats[0] < value and value < stats[1]))
我希望过滤器可以工作,但事实并非如此。有人可以解释我在这里缺少什么吗?
调用filter
时,value
是键值对RDD的键,而stats
是RDD((num, (min, max, count))
)的值,即为什么你有 tuple index out of range
.
当您调用 mapValues
时,value
是 num
而 stats
是 (min, max, count)
。事实上,mapValues
转换传递键值对 RDD 中的每个值。
如果你分解你的RDD格式
(key, (num, (min, max, count)))
key = value
(num, (min, max, count)) = stats
num = stats[0]
(min, max, count) = stats[1]
min = stats[1][0]
max = stats[1][1]
count = stats[1][2]
所以你的stats[2]
超出了范围
我正在使用 pyspark 在 spark 中工作。当我使用
下面的 lambda 时,我有一个格式为[(key, (num, (min, max, count))),....]
的 rdd
t = fullBids.filter(lambda (value, stats): (stats[2] > 10 and stats[0] < value and value < stats[1]))
它出错了
tuple index out of range
但是当我在 mapValues 调用中使用它时,它运行成功,正确返回 True 或 False。
ti = fullBids.mapValues(lambda (value, stats): (stats[2] > 10 and stats[0] < value and value < stats[1]))
我希望过滤器可以工作,但事实并非如此。有人可以解释我在这里缺少什么吗?
调用filter
时,value
是键值对RDD的键,而stats
是RDD((num, (min, max, count))
)的值,即为什么你有 tuple index out of range
.
当您调用 mapValues
时,value
是 num
而 stats
是 (min, max, count)
。事实上,mapValues
转换传递键值对 RDD 中的每个值。
如果你分解你的RDD格式
(key, (num, (min, max, count)))
key = value
(num, (min, max, count)) = stats
num = stats[0]
(min, max, count) = stats[1]
min = stats[1][0]
max = stats[1][1]
count = stats[1][2]
所以你的stats[2]
超出了范围