Как сохранить указатель на «продолжить с того места, где вы остановились» во время итерации в spark scala dataframe?

#scala #apache-spark

#scala #apache-spark

Вопрос:

Допустим, у меня есть некоторый фрейм данных, который я читаю, и каждый раз, когда я хочу отобразить верхние 2 строки в соответствии с отсортированным столбцом. В следующий раз, когда я буду читать в этом фрейме данных, я не хочу начинать с начала, а скорее отображать следующие 2 строки с того места, где я остановился в предыдущий раз. Я думаю, мне нужно будет создать некоторый столбец двоичного указателя, который сообщает ему, где начинать / останавливаться, и когда он достигнет конца, он должен вернуться к началу. Вот пример:

   var df = Seq(("Mike",1),("Kevin",2),("Bob",3),("Steve",4),("Dave",5),("Dustin",6),("Melvin",7),("Henry",8)).toDF("name","score")
  

введите описание изображения здесь

при первом запуске выводом должны быть первые две строки Mike и Kevin:

введите описание изображения здесь

при втором запуске выводом должны быть следующие две строки,

введите описание изображения здесь

и так далее, и тому подобное.

Как мне сделать это динамически, чтобы при чтении в CSV он мог автоматически определять, что отображать? Думая, что мне придется инициализировать столбец «указатель», а затем каким-то образом перебирать его и каждый раз перезаписывать существующий файл новым местоположением указателя. Как бы вы поступили по этому поводу?

Я начал с этого кода, но в идеале мне нужно иметь 1 в первой строке при инициализации вместо всех нулей

 df.withColumn("pointer",lit(0)).show
  

Ответ №1:

Если вы сохраняете фрейм данных в формате CSV после каждого чтения и выдаете верхние 2 строки, вы можете добавить туда столбец дискриминатора (я полагаю, вы использовали указатель в этом смысле) и сохранить его в фрейме данных (в конечном счете, также в CSV).). Когда вы считываете CSV обратно в dataframe, вы можете отфильтровать строки, для которых установлен этот флаг. Это поможет вам избавиться от тех строк, которые вы уже вывели.