最初我将date_compare_(date1,date2)作为整个类的方法,但它会报告错误。这是否意味着我们无法在地图或过滤器中调用函数本身之外的函数?像课堂上的方法一样?具体来说,最初我将date_compare_(date1,date2)作为类方法,但它不起作用。似乎现在它不起作用,只有当我把所有东西都放在一个函数中时
def extract_neighbors_from_users_network(self):
end_date = self.arguments_dict['end_day']
print("===================================")
print(end_date)
print("===================================")
print("===================================")
def date_compare_(date1, date2):
date1_arr = date1.split("-")
date2_arr = date2.split("-")
for i in range(len(date1_arr)):
if date1_arr[i] < date2_arr[i]:
return True
elif date1_arr[i] > date2_arr[i]:
return False
return True
def date_filter_(date, start_date, end_date):
return date_compare_(start_date, date) and self.date_compare_(date, end_date)
def date_filter1(x):
return date_filter_(x[0], "0000-00-00", end_date)
rdd = self.sc.textFile(action_file).map(lambda x: x.split(',')).filter(lambda x: date_filter1(x)).filter(lambda x: x[4] == 'F')
答案 0 :(得分:1)
从rdd = self.sc.textFile
我猜你的最初课程是这样的:
class YourClass():
def __init__(self):
self.sc = SparkContext()
def date_compare_(self, date1, date2):
pass
def extract_neighbors_from_users_network(self):
rdd = self.sc.textFile().map(self.date_compare_())
如果是这样,您应该将date_compare_
更改为
@staticmethod
def date_compare_(date1, date2):
pass
和
def extract_neighbors_from_users_network(self):
rdd = self.sc.textFile().map(YourClass.date_compare_())
更新:
如果在self.date_compare_
内引用rdd.map()
,spark会将YourClass
的整个实例作为任务发送给执行者。没关系。
但是! YourClass
的实例包含SparkContext()
,不能在执行者身上引用。这就是错误出现的原因。