У меня есть очень большие временные ряды данных, формат данных: (arrival_time, ключ, значение), единица времени сек, например:Использование Apache-Спарк для анализа временных рядов
0.01, k, v
0.03, k, v
....
1.00, k, v
1.10, k, v
1.20, k, v
1.99, k, v
2.00, k, v
...
Мне нужно сделать, чтобы получить количество строк в секунду от всех данных. В настоящее время я использую pySpark и мой код, как:
linePerSec = []
lo = rdd.take(1)[0]
hi = lo + 1.0
end = rdd.collect()[-1][0]
while(hi < end):
number = rdd.filter(lambda (t, k, v): t >= lo and t < hi).count()
linePerSec.append(number)
lo = hi
hi = lo + 1.0
Но это очень медленно, даже медленнее, чем просто проходя через линию передачи данных по линии в цикле. Я предполагаю, что это потому, что rdd.filter() проходит через весь rdd, чтобы найти линии, соответствующие условиям фильтра. Но для временных рядов нам не нужно проходить данные после границы hi в моем коде. Есть ли какие-либо решения, позволяющие искры перестать проходить через rdd в моей ситуации? Спасибо!
можете ли вы опубликовать свой ожидаемый результат? я не могу понять, что вы пытаетесь сделать. – maxymoo