在此answer中,大多数答案都介绍了foreach( $_POST['item'] as $item) {
$item['part_number'];
$item['description];
}
+ groupByKey
策略。但是,我找不到关于为何spark删除reduceGroups
API的任何评论。有评论说,Sparks的Catalyst Optimizer可以减少一些计算,这可以解释原因。但是,根据作者和我的测试,数据集的reduceByKey
+ groupByKey
策略比reduceGroups
慢得多。
那么为什么reduceByKey
被删除了,我怎么能找到替代方法呢?
答案 0 :(得分:0)
该答案中的注释表明,从Spark 2.1.0开始,数据集上的groupByKey和reduceGroups的行为与RDD上的reduceByKey操作相同。
https://issues.apache.org/jira/browse/SPARK-16391
Spark尚未删除reduceByKey API。要使用reduceByKey,您的数据必须为RDD对类型。例如,如果您有一个数据集并想尝试使用reduceByKey,则必须执行以下操作:
df
.map(row => (row.key, row.value))
.rdd
.reduceByKey((a,b) => SomeReductionFunction(a,b))
.values
.toDF()
请注意,第二行将您的数据集行转换为带有2个“列”(一个键和一个值)的RDD,因为reduceByKey需要一对RDD。 如果您已经具有数据集类型,则此方法也不起作用,因为它将数据集转换为rdd,然后如果要继续对数据集进行操作,则会将其转换为数据框或数据集。