Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何在RDD数据的筛选器中调用外部函数_Apache Spark_Filter - Fatal编程技术网

Apache spark 如何在RDD数据的筛选器中调用外部函数

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

现在我知道对于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 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。