我该如何使用GroupBy,而不是通过数据集映射?

时间:2019-01-23 10:21:56

标签: scala apache-spark apache-spark-dataset

我正在与Datasets一起工作,并尝试分组然后使用地图。

我正在设法使用RDD进行操作,但是按分组后的数据集我无法选择使用地图。

有办法吗?

1 个答案:

答案 0 :(得分:1)

您可以申请groupByKey

  

def groupByKey[K](func: (T) ⇒ K)(implicit arg0: Encoder[K]): KeyValueGroupedDataset[K, T]

     

(特定于标量)返回KeyValueGroupedDataset,其中数据按给定的键函数分组。

返回KeyValueGroupedDataset,然后返回mapGroups

  

def mapGroups[U](f: (K, Iterator[V]) ⇒ U)(implicit arg0: Encoder[U]): Dataset[U]

     

(特定于标量)将给定功能应用于每组数据。对于每个唯一组,将向该函数传递组键和包含该组中所有元素的迭代器。该函数可以返回任意类型的元素,该元素将作为新的数据集返回。

     

此功能不支持部分聚合,因此需要对数据集中的所有数据进行混排。如果应用程序打算对每个键执行聚合,则最好使用reduce函数或org.apache.spark.sql.expressions#Aggregator。

     

在内部,如果任何给定的组太大而无法放入内存,则实现将溢出到磁盘。但是,除非他们确定在给定群集内存的限制下,这样做是可行的,否则用户必须小心避免为一个组实现整个迭代器。