C.collect()
我希望A中的所有数字都低于50并将它们放入B中,然后将所有数字从B中取出,并将它们放入C.
但是,m = 10
C = B.filter(lambda x: x > m)
的结果是空数组。
但是,如果我改变
t
它会正常工作。
我无法理解为什么,在此操作中它需要先前的var parent = element(by.css('.parent-class'));
var child = element(by.css('.child-class'));
parent.element(child.locator()).getText();
值
答案 0 :(得分:4)
我无法理解为什么,在此操作中它需要先前的t值
其实 不 引用之前的t = 50 但引用t = 10本身
如果你编写一个自定义函数来打印正在发生的事情,那就更明显了
A = sc.parallelize(xrange(1, 100))
t = 50
B = A.filter(lambda x: x < t)
B.collect()
t = 10
def filters(x):
print x, t
return x > t
C = B.filter(lambda x: filters(x))
print C.collect()
filters
功能将打印如下
1 10
2 10
3 10
4 10
5 10
6 10
7 10
8 10
9 10
它显示 t为10 ,并且B = A.filter(lambda x: x < t)
再次调用t=10
,即。 B现在有1到9 ,当调用.filter(lambda x: x > t)
时,它会返回空列表 ,因为没有大于10的数字
正如Spark's official documentation也说
默认情况下,每次对其执行操作时,都可以重新计算每个转换后的RDD。但是,您也可以使用持久化(或缓存)方法在内存中保留RDD,在这种情况下,Spark会在群集上保留元素,以便在下次查询时更快地访问。还支持在磁盘上保留RDD,或在多个节点之间复制。