Я работаю с Datasets и пытаюсь сгруппировать, а затем использовать карту.
Datasets
Мне удается сделать это с RDD, но с набором данных за группой, у меня нет возможности использовать карту.
Есть ли способ, которым я могу это сделать?
Вы можете подать заявку groupByKey:
groupByKey
def groupByKey[K](func: (T) ⇒ K)(implicit arg0: Encoder[K]): KeyValueGroupedDataset[K, T] (специфично для Scala) Возвращает KeyValueGroupedDataset, где данные группируются по заданной ключевой функции.
def groupByKey[K](func: (T) ⇒ K)(implicit arg0: Encoder[K]): KeyValueGroupedDataset[K, T]
(специфично для Scala) Возвращает KeyValueGroupedDataset, где данные группируются по заданной ключевой функции.
, который возвращает KeyValueGroupedDataset, а затем mapGroups:
KeyValueGroupedDataset
mapGroups
def mapGroups[U](f: (K, Iterator[V]) ⇒ U)(implicit arg0: Encoder[U]): Dataset[U] (специфично для Scala) Применяет данную функцию к каждой группе данных. Для каждой уникальной группы функции будет передан ключ группы и итератор, содержащий все элементы в группе. Функция может возвращать элемент произвольного типа, который будет возвращен как новый набор данных. Эта функция не поддерживает частичное агрегирование, и в результате требуется перетасовать все данные в наборе данных. Если приложение намеревается выполнить агрегацию по каждому ключу, лучше всего использовать функцию Reduce или org.apache.spark.sql.expressions # Aggregator. Внутри, реализация выплескивается на диск, если какая-либо группа слишком велика для размещения в памяти. Однако пользователи должны позаботиться о том, чтобы избежать материализации всего итератора для группы (например, путем вызова toList), если они не уверены, что это возможно, учитывая ограничения памяти их кластера.
def mapGroups[U](f: (K, Iterator[V]) ⇒ U)(implicit arg0: Encoder[U]): Dataset[U]
(специфично для Scala) Применяет данную функцию к каждой группе данных. Для каждой уникальной группы функции будет передан ключ группы и итератор, содержащий все элементы в группе. Функция может возвращать элемент произвольного типа, который будет возвращен как новый набор данных.
Эта функция не поддерживает частичное агрегирование, и в результате требуется перетасовать все данные в наборе данных. Если приложение намеревается выполнить агрегацию по каждому ключу, лучше всего использовать функцию Reduce или org.apache.spark.sql.expressions # Aggregator.
Внутри, реализация выплескивается на диск, если какая-либо группа слишком велика для размещения в памяти. Однако пользователи должны позаботиться о том, чтобы избежать материализации всего итератора для группы (например, путем вызова toList), если они не уверены, что это возможно, учитывая ограничения памяти их кластера.