循环遍历列表以将相同的函数应用于多个数据集

时间:2016-11-04 17:26:10

标签: python python-2.7 list loops oop

我正在寻找一种方法将功能应用于多个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等。

最有效的方法是什么?谢谢!

1 个答案:

答案 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部分。