【问题标题】:Loop over a list in order to apply the same function to multiple Datasets循环列表以将相同的函数应用于多个数据集
【发布时间】:2017-03-18 15:12:57
【问题描述】:

我正在寻找一种将函数应用于多个 rdds 的方法(rdd:弹性分布式数据集)。我正在使用 PySpark,我必须通过对所有原始数据集应用相同的函数来获得 6 个新的 rdd。我有这样的事情:

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 等。

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

【问题讨论】:

    标签: python python-2.7 list loops oop


    【解决方案1】:

    使用列表存储您的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 对象,因为您没有使用datetime 对象的time 部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 2021-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      相关资源
      最近更新 更多