Мне нужно получить первый элемент каждого раздела dataframe. Я знаю, что мне нужно использовать mapPartitions, но мне непонятно, как его использовать.
Примечание. Я использую Spark2.0, фрейм данных отсортирован.
Мне нужно получить первый элемент каждого раздела dataframe. Я знаю, что мне нужно использовать mapPartitions, но мне непонятно, как его использовать.
Примечание. Я использую Spark2.0, фрейм данных отсортирован.
Я считаю, что это должно выглядеть примерно так:
import org.apache.spark.sql.catalyst.encoders.RowEncoder
...
implicit val encoder = RowEncoder(df.schema)
val newDf = df.mapPartitions(iterator => iterator.take(1))
Это займет 1 элемент из каждого раздела в DataFrame. Затем вы можете собрать все данные для своего водителя, т.е.:
nedDf.collect()
Это вернет вам массив с количеством элементов, равным количеству ваших разделов.
UPD обновлен для поддержки Spark 2.0.
collect
? Он возвращает массив строк. Операция mapPartitions
без collect
вернет новый кадр данных.
- person Zyoma; 28.09.2016