我有两个LabeledPoints
- Prediction1
和Prediction2
。这两个LabeledPoints
都具有作为第一元素的值和作为第二元素的预测。我想检查first
中的Prediction1
元素是否等于first
中的Prediction2
元素。所以像这样:
for each value in Prediction1 and Prediction2:
if Prediction1.tup[0] != Prediction2.tup[0]:
print 'Value unequal'
break
示例:
假设以下是RDD
LabeledPoints
的{{1}}:
Prediction1
[(1,2),(3,4),(5,6)]
:
Prediction2
在上面的示例中,[(1,12),(3,13),(5,2)]
(1,3,5)的每个LabeledPoint
的第一个元素等于Prediction1
的每个LabeledPoint
的第一个元素(1,3) ,5)。但即使其中一个没有匹配,那么我想退出流程并打印出他们不匹配并结束。
我如何在Prediction2
答案 0 :(得分:1)
假设两个RDD的每个分区具有相同数量的分区和元素,您只需zip
和take
:
prediction1 = sc.parallelize([(1, 2), (3, 4), (5, 6)])
prediction2 = sc.parallelize([(1, 12), (3, 13), (5, 2)])
prediction3 = sc.parallelize([(1, 0), (5, 0), (5, 0)])
def mismatch(rdd1, rdd2):
def mismatch_(xy):
(x1, _), (y1, _) = xy
return x1 != y1
return bool(rdd1.zip(rdd2).filter(mismatch_).take(1))
mismatch(prediction1, prediction2)
## False
mismatch(prediction1, prediction3)
## True
由于take
是懒惰的,它应该或多或少地按预期工作。见Stevens' Advanced Programming in the Unix Environment
如果未达到初始条件,您可以zip
,交换(zipWithIndex
)和lambda kv: (kv[1], kv[0])
手动join
。