scala - 我如何使用 GroupBy 而不是 Map over Dataset?
问题描述
我正在使用Datasets
并尝试分组,然后使用地图。
我正在设法使用 RDD 来做到这一点,但是对于分组后的数据集,我没有使用地图的选项。
有什么办法可以做到吗?
解决方案
您可以申请groupByKey
:
def groupByKey[K](func: (T) ⇒ K)(implicit arg0: Encoder[K]): KeyValueGroupedDataset[K, T]
(特定于 Scala)返回一个 KeyValueGroupedDataset,其中数据按给定的键 func 分组。
返回KeyValueGroupedDataset
然后mapGroups
:
def mapGroups[U](f: (K, Iterator[V]) ⇒ U)(implicit arg0: Encoder[U]): Dataset[U]
(Scala-specific)将给定的函数应用于每组数据。对于每个唯一组,该函数将传递组键和包含组中所有元素的迭代器。该函数可以返回任意类型的元素,该元素将作为新数据集返回。
此函数不支持部分聚合,因此需要对 Dataset 中的所有数据进行混洗。如果应用程序打算对每个键执行聚合,最好使用 reduce 函数或 org.apache.spark.sql.expressions#Aggregator。
在内部,如果任何给定的组太大而无法放入内存,则实现将溢出到磁盘。但是,用户必须注意避免具体化组的整个迭代器(例如,通过调用 toList),除非他们确定在考虑到集群的内存限制的情况下这是可能的。
推荐阅读
- bazel - Bazel 方面如何从 java_library 目标获取源文件列表?
- java - 无法在 eclipse photon 上安装 windowbuilder 插件
- image - Flutter pdf生成太慢,图像太慢
- c++ - 使用 stod() 转换小数点后带有字母的字符串时也不例外
- cassandra - Cassandra 表中的分布式行级锁定或实现更高的一致性
- google-app-engine - google cloud storage.object.delete 桶的权限已删除,想重新访问
- android - 如何判断颤振应用程序是否在android中处于活动状态
- html - http://www。到 http:// 重定向根本不起作用
- angular - primeNg 如何隐藏数据集标签?
- python - setup.py 将生成的共享库的副本放在根站点包目录中