我有一个大型数据集,我需要根据特定参数将其分成几组。我希望尽可能高效地处理工作。我可以设想两种方法
选项 1 - 从原始 RDD 创建地图并过滤
def customMapper(record):
if passesSomeTest(record):
return (1,record)
else:
return (0,record)
mappedRdd = rddIn.map(lambda x: customMapper(x))
rdd0 = mappedRdd.filter(lambda x: x[0]==0).cache()
rdd1 = mappedRdd.filter(lambda x: x[1]==1).cache()
选项 2 - 直接过滤原始 RDD
def customFilter(record):
return passesSomeTest(record)
rdd0 = rddIn.filter(lambda x: customFilter(x)==False).cache()
rdd1 = rddIn.filter(customFilter).cache()
第一种方法必须迭代原始数据集的所有记录3次,而第二种方法只需要这样做两次,在正常情况下,但是spark在幕后做了一些图形构建,所以我可以想象它们是以同样的方式有效地完成。我的问题是:a.)一种方法是否比另一种方法更有效,或者火花图构建是否使它们等效 b.)是否可以一次完成此拆分