привет, может кто-нибудь объяснить мне, почему mapPartitions
реагирует по-разному на эти две функции? (Я смотрел на эту this thread, и я не думаю, что моя проблема возникает из-за того, что мой итерацию является TraversableOnce
как я его создать.Пустой массив, возвращаемый mapPartitions в PySpark
L=range(10)
J=range(5,15)
K=range(8,18)
data=J+K+L
def function_1(iter_listoflist):
final_iterator=[]
for sublist in iter_listoflist:
final_iterator.append([x for x in sublist if x%9!=0])
return iter(final_iterator)
def function_2(iter_listoflist):
final_iterator=[]
listoflist=list(iter_listoflist)
for i in range(len(listoflist)):
for j in range(i+1,len(listoflist)):
sublist=listoflist[i]+listoflist[j]
final_iterator.append([x for x in sublist if x%9!=0])
pass
pass
return iter(final_iterator)
sc.parallelize(data,3).glom().mapPartitions(function_1).collect()
возвращает то, что он должен в то время как
sc.parallelize(data,3).glom().mapPartitions(function_2).collect()
возвращает пустой массив, я проверяемый код, возвращая список в конце, и он делает то, что я хочу его.
спасибо за вашу помощь
P hilippe C
Благодарю вас за ответ и примечание. Я учту его. Это длина 1, потому что она называется mapPartition? Когда я делал свои тесты, он был размером с мой список или итератор. –
Нет, это потому, что вы используете 'glom' – zero323
Хорошо, спасибо большое, моя работа arround заключалась в том, чтобы сделать два для петель в другом месте, а затем вызвать распараллеливание, и это сработало. Если я не использую glom(), у меня есть сообщение об ошибке, когда я пытаюсь выполнить итерацию по ints. есть ли способ иметь петлю внутри функции? Я в основном пытаюсь вычислить списки параллельно, но им нужно, чтобы они не смешивались. Еще раз спасибо –