我有一个看起来像这样的rdd:
totalsrdd = [((2, 16),[[1,2,3,...,36],[2,2,3,...,36]]),((2,17),[[1,2,3,...,36]]),...]
密钥是天数(2,16)等,它们每个对应一个列表或36个数字的多个列表。对于每个日期,我需要一个列表,其中列表中的第i个条目是每个列表中第i个条目的平均值或相应日期的列表。
例如,对于(2,16),第一个条目的平均值为(1 + 2)/(36 + 36)或.04166,因为该日期有两个列表。
newRdd = [((2,16),[[.04166,.055555,.083333,...,1]]),(2,17),[[.027777,.055555,.083333,...,1]]),...]
由于(2,17)只有一个列表,因此列表中的每个条目除以36。
这是我到目前为止的代码。数据比两个日期大得多。
def get_partition(x):
j = [(x[1][i]).total_seconds() for i in range(len(x[1]))]
return (x[0],j)
newTimeDeltaRdd2 = newtimeDeltaRdd.map(lambda x : ((x[1].month,x[1].day), x[0]))
totals = newTimeDeltaRdd2.map(lambda x: (get_partition(x)))
totalsrdd = totals.groupByKey().map(lambda x : (x[0], list(x[1])))
谢谢!
答案 0 :(得分:1)
以下是获取newrdd
的可能解决方案:
totalsrdd = [((2, 16),[[1,2,3,...,36],[2,2,3,...,36]]),((2,17),[[1,2,3,...,36]]),...]
newrdd = []
for key, _list in totalsrdd:
averages = []
for i in range(36):
averages.append(sum([_l[i] for _l in _list]) / 36 * len(_list))
newrdd.append((key, averages))
答案 1 :(得分:0)
快速而肮脏的解决方案,可以提供您描述的行为。
我仍然会考虑使用字典
import numpy as np
for entry in totalsrdd:
sum = np.zeros(36)
for ls in entry[1]:
sum = np.add(sum, ls)
sum = np.divide(sum, len(entry[1]) * 36)
entry[1] = sum