У меня есть (довольно большой, думаю, 10e7 строк) DataFrame, из которого я фильтрую элементы на основе некоторого свойства
val res = data.filter(data(FieldNames.myValue) === 2).select(pk.name, FieldName.myValue)
Мой DataFrame имеет n разделов data.rdd.getNumPartitions
Теперь я хочу знать, из какого раздела произошли мои строки. Я знаю, что могу просто перебрать все разделы с чем-то вроде этого
val temp = res.first() //or foreach, this is just an example
data.foreachPartition(f => {
f.exists(row => row.get(0)==temp.get(0))
//my code here
}) //compare PKs
or data.rdd.mapPartitionsWithIndex((idx, f) => ...)
Однако это кажется чрезмерным, а также не очень эффективным, если мои результаты и мой DataFrame становятся большими.
Есть ли способ Spark сделать это после того, как я выполнил операцию filter()?
Или, альтернативно, есть ли способ переписать/альтернативу оператору filter(), чтобы он возвращал источник строки?
Я также мог бы сохранить местоположение раздела в своем DataFrame и обновить его при переразметке, но я бы предпочел сделать это искровым способом.
(Единственный похожий вопрос, который я нашел, был здесь, и ни вопрос, ни комментарий не очень полезны. Я также нашел это, которое может быть похоже, но не одно и то же)
Заранее спасибо за любую помощь/указатели, и я извиняюсь, если я пропустил вопрос, похожий на мой, на который уже был дан ответ.