итерация в кадре данных SQL sql, получение значения первой строки в первой итерации и значения второй строки в следующей итерации и т. д. - PullRequest
0 голосов
/ 11 октября 2018

Ниже приведен запрос, который даст данные и расстояние, где расстояние <= 10 км </p>

var s=spark.sql("select date,distance from table_new where distance <=10km")
s.show()

, это даст вывод, такой как

12/05/2018 | 5
13/05/2018 | 8
14/05/2018 | 18
15/05/2018 | 15
16/05/2018 | 23
---------- | --

я хочу использовать первую строкуиз кадра данных s сохраните значение даты в переменной v на первой итерации.

На следующей итерации следует выбрать вторую строку и соответствующее значение данных для замены старой переменной b.как и так далее.

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

«Плохой» способ сделать это - собрать фрейм данных с помощью 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)))
0 голосов
/ 11 октября 2018

Я думаю, вы должны взглянуть на Spark "Window Functions".Здесь вы можете найти то, что вам нужно.

...