«Плохой» способ сделать это - собрать фрейм данных с помощью df.collect (), который будет возвращать список строк, которые вы можете вручную перебирать в каждой из них с помощью цикла. Это плохо, потому что он приносит все данныев вашем драйвере.
Лучше всего было бы использовать foreach ():
df.foreach(lambda x: <<your code here>>)
foreach () принимает лямбда-функцию в качестве аргумента, которая перебирает каждую строку кадра данных, не приводя вседанные в драйвере. Но вы не можете использовать простую локальную переменную v внутри лямбда-функции, когда происходит перезапись. Вы можете использовать искровые аккумуляторы для такого случая.
например: если я хочу суммировать всезначения во 2-м столбце
counter = sc.longAccumulator("counter")
df.foreach(lambda row: counter.add(row.get(1)))