注意到 PySpark 的一些奇怪行为,将不胜感激任何见解。
假设我有一个由简单元素组成的 RDD
from collections import namedtuple
Animal = namedtuple('Animal', ('name','age'))
a = Animal('jeff',3)
b = Animal('mike',5)
c = Animal('cathy',5)
rdd=sc.parallelize([a,b,c])
现在我有兴趣在一个简单的类中捕获该 RDD 的不同属性,例如使用从每个元素rdd.map(lambda s: getattr(s,'name'))
中提取属性。name
所以这个类的对象
class simple():
def __init__(self,name):
self.name=name
def get_value(self):
self.value = rdd.map(lambda s: getattr(s,self.name)).collect()
将设置它们并从 RDD 中name
获取相应的值。values
theAges = simple('age')
theAges.get_value()
但是,这遇到了一个我认为集中在self.name
表达式中lambda
的错误。第二节课效果很好
class simple2():
def __init__(self,name):
self.name=name
def get_value(self):
n=self.name
self.value = rdd.map(lambda s: getattr(s,n)).collect()
我添加的只是前面的调用n=self.name
并传递n
到lambda
而不是self.name
.
那么我们无法评估的问题是self.name
什么lambda
?我在纯 python 中创建了类似的情况(self.name
在 alambda
中)并且没有错误,所以我认为这是特定于 Spark 的。谢谢你的想法。