У меня есть RDD с около 7M записей с 10 нормализованными координатами в каждой. У меня также есть несколько центров, и я пытаюсь сопоставить каждую запись с ближайшим центром (евклидово расстояние). Проблема в том, что это генерирует только одну задачу, что означает, что она не распараллеливается. Это форма:
def doSomething(point,centers):
for center in centers.value:
if(distance(point,center)<1):
return(center)
return(None)
preppedData.map(lambda x:doSomething(x,centers)).take(5)
СДР preppedData кэшируется и уже оценивается, функция doSomething представлена намного проще, чем она есть на самом деле, но принцип тот же. Центры - это список, который был передан в эфир. Почему эта карта только в одном задании?
Подобные фрагменты кода в других проектах просто сопоставляются с +- 100 задачами и запускаются на всех исполнителях, в этом случае 1 задача на 1 исполнителе. В моей работе есть 8 исполнителей с 8 ГБ и 2 ядрами на исполнителя.