这里的问题是您的reduce函数。对于每个键,
reduceByKey请使用一对值调用reduce函数,并期望它产生相同类型的组合值。
例如,说我想执行字计数 *** 作。首先,我可以将每个单词映射为一
(word, 1)对,然后可以
reduceByKey(lambda x, y: x +y)对每个单词的计数求和。最后,我剩下了
(word, count)成对的RDD 。
这是来自PySpark
API文档的示例:
>>> from operator import add>>> rdd = sc.parallelize([("a", 1), ("b", 1), ("a", 1)])>>> sorted(rdd.reduceByKey(add).collect())[('a', 2), ('b', 1)]
要了解为什么您的示例不起作用,您可以想象应用了reduce函数,如下所示:
reduce(reduce(reduce(firstValue, secondValue), thirdValue), fourthValue) ...
根据您的reduce函数,听起来您可能正在尝试实现内置
groupByKey*** 作,该 *** 作将每个键与其值列表进行分组。
此外,看一看
combineByKey,的推广
reduceByKey(),使精简函数的输入和输出类型不同(
reduceByKey是实现在以下方面
combineByKey)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)