Apache spark 如何在RDD数据的筛选器中调用外部函数
现在我知道对于dataFrame,我们可以使用udf,但目前我正在处理RDD,数据。除了使用on-top函数外,如何在类中的所有方法中定义filter使用的方法Apache spark 如何在RDD数据的筛选器中调用外部函数,apache-spark,filter,Apache Spark,Filter,现在我知道对于dataFrame,我们可以使用udf,但目前我正在处理RDD,数据。除了使用on-top函数外,如何在类中的所有方法中定义filter使用的方法 def date_filer_help(date1, date2): date1_arr = date1.split("-") date2_arr = date2.split("-") for i in range(len(date1_arr)): if in
def date_filer_help(date1, date2):
date1_arr = date1.split("-")
date2_arr = date2.split("-")
for i in range(len(date1_arr)):
if int(date1_arr[i]) < int(date2_arr[i]):
return True
elif int(date1_arr[i]) > int(date2_arr[i]):
return False
return True
def date_filter(prev_date, date, end_date):
return date_filer_help(prev_date, date) and date_filer_help(date, end_date)
rdd = sc.textFile(action_file).map(lambda x: x.split(','))\
.filter(lambda x: date_filter("0000-00-00", x[0], "2016-06-30"))
我想在这个类或其他类中将date_filter写为static。否则,在每个方法中,我需要一次又一次地重新定义上述两个帮助。但是如果我在集群中运行,它就不起作用了,我应该怎么做呢?你的意思是:
class DataFilter(object):
def __init__(self):
self.sc = SparkContext()
@staticmethod
def date_filer_help(date1, date2):
return date1 <= date2
@staticmethod
def date_filter(prev_date, date, end_date):
return DataFilter.date_filer_help(prev_date, date) and DataFilter.date_filer_help(date, end_date)
def run(self):
rdd = self.sc.parallelize(
map(lambda x: ((datetime.date(2016, 6, 25) + datetime.timedelta(x)).strftime('%Y-%m-%d'), x), range(10)))
result = rdd.filter(lambda x: DataFilter.date_filter("0000-00-00", x[0], "2016-06-30"))
return result.collect()
if __name__ == '__main__':
print(DataFilter().run())
现在我意识到,这是因为我在另一个文件中运行main而没有sc.addFile。