Время выполнения и настойчивость - PullRequest
0 голосов
/ 12 июля 2019

Я новичок в Spark. Выполняя несколько примеров, чтобы попытаться получить представление о стойкости СДР, я столкнулся с тем, чего не понимаю. Рассмотрим два следующих эксперимента:

Эксперимент 1

Я начал с определения времени некоторых действий без использования постоянства.

np.random.seed(1)
numbers = sc.range(0, 10000000)
evens = numbers.filter(lambda x : x % 2)
t1 = time.time()
evens.collect()    
t2 = time.time()
evens.collect()
t3 = time.time()
evens.count()
t4 = time.time()
print(t2 - t1)
print(t3 - t2)
print(t4 - t3)

Я запускал это несколько раз, и каждый раз получал что-то похожее на:

4.334701299667358
4.289132833480835
3.77268123626709

Затем я добавил строку evens.persist() сразу после определения evens. Некоторые типичные результаты для этого кода:

4.4880735874176025
0.7230954170227051
1.4762592315673828

Пока все хорошо. Первый collect() занимал примерно одинаковое время в каждом случае, но второй collect() и count() занимал значительно меньше времени при работе с постоянным СДР. Все как и ожидалось.

Эксперимент 2

Затем я переключил первый collect() на count(). Не сохраняя, мой код был:

np.random.seed(1)
numbers = sc.range(0, 10000000)
evens = numbers.filter(lambda x : x % 2)
t1 = time.time()
evens.count()    
t2 = time.time()
evens.collect()
t3 = time.time()
evens.count()
t4 = time.time()
print(t2 - t1)
print(t3 - t2)
print(t4 - t3)

Типичный вывод для этого кода:

4.011156320571899
4.720277786254883
3.8882973194122314

Но когда я добавляю evens.persist(), я получаю вывод, подобный следующему:

5.5741260051727295
0.6982665061950684
1.5375416278839111

По некоторым причинам первый count() занимает значительно больше времени при работе с постоянным СДР, чем с непостоянным СДР. Это сохранялось каждый раз, когда я запускал код.

Есть идеи, почему это так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...