我正在与Datasets
一起工作,并尝试分组然后使用地图。
我正在设法使用RDD进行操作,但是按分组后的数据集我无法选择使用地图。
有办法吗?
答案 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。
在内部,如果任何给定的组太大而无法放入内存,则实现将溢出到磁盘。但是,除非他们确定在给定群集内存的限制下,这样做是可行的,否则用户必须小心避免为一个组实现整个迭代器。