#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, вы можете отфильтровать строки, для которых установлен этот флаг. Это поможет вам избавиться от тех строк, которые вы уже вывели.