我正在寻找一种方法将功能应用于多个rdds(rdd:A Resilient Distributed Dataset)。我使用PySpark,我必须通过对所有原始数据集应用相同的函数来获得6个新的rdds。我有这样的事情:
def define_CohortPeriods(d_date):
do something
return something
if __name__ == '__main__':
try:
first_OrderPeriod = define_CohortPeriods(d_date = '2016-10-19')
second_OrderPeriod = define_CohortPeriods(d_date = '2016-10-20')
third_OrderPeriod = define_CohortPeriods(d_date = '2016-10-21')
fourth_OrderPeriod = define_CohortPeriods(d_date = '2016-10-22')
fifth_OrderPeriod = define_CohortPeriods(d_date = '2016-10-23')
sixth_OrderPeriod = define_CohortPeriods(d_date = '2016-10-24')
except ValueError:
print "Error"
我想给我的代码提供两个参数,例如第一个和最后一个日期,并执行以下操作:
from datetime import date, timedelta as td
first_date = datetime.datetime.strptime('2016-10-19', '%Y-%m-%d')
last_date = datetime.datetime.strptime('2016-10-24', '%Y-%m-%d')
deltaDate = last_date - first_date
for i in range(deltaDate.days + 1):
print d1 + td(days=i)
给出:
2016-10-19 00:00:00
2016-10-20 00:00:00
2016-10-21 00:00:00
2016-10-22 00:00:00
2016-10-23 00:00:00
2016-10-24 00:00:00
最后,遍历这个日期列表,每次将日期与d_date相关联,并分别得到我的预期输出:first_OrderPeriod,second_OrderPeriod,third_OrderPeriod等。
最有效的方法是什么?谢谢!
答案 0 :(得分:0)
使用列表存储orderPeriod
值,然后按索引访问它们。由于我们将它们存储在列表中,因此我们可以使用列表推导来构建该列表。
dates_list = [d1 + td(days=i) for i in range(deltaDate.days +1)]
orderPeriods = [define_CohortPeriods(d_date) for d_date in dates_list]
define_CohortPeriods
是否接受字符串或datetime
对象并不十分清楚。您可能应该使用date
个对象,因为您没有使用time
对象的datetime
部分。