一起学Spark(4) -- 向Spark传递函数

                                                   向Spark传递函数

注意当你传递的对象是某个对象的成员,或者包含了对某个对象中一个字段的引用时(如self.field),Spark就会把整个对象发送到工作节点,这可能比你想要传递的东西大得多。

#-*- coding:utf-8 -*-
class SearchFunctions(object):
    def __init__(self,query):
        self.query = query
    def isMatch (self,s):
        return self.query in s
    def getMatchesFunctionReference(self,rdd):
        #问题:在rdd.filter self.isMatch 中引用了整个self
        return rdd.filter(self.isMatch)
    def getMatchesMemberReference(self,rdd):
        #问题:在self.query中引用了整个self
        return rdd.filter(lambda x:self.query in x)

应改正为:传递一个不带字段引用的python 函数

 

#-*- coding:utf-8 -*-
class SearchFunctions(object):
    ...
    def getMatchesNoReference(self,rdd):
        # 安全:只把需要的字段提取到局部变量中
        query = self.query
        return rdd.filter(lambda x:query in x)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值