我正在通过示例学习Spark,但我不知道理解API的好方法。举例来说,非常经典的字数例如:阅读和学习Spark API?
val input = sc.textFile("README.md")
val words = input.flatMap(x => x.split(" "))
val result = words.map(x => (x, 1)).reduceByKey((x, y) => x + y)
当我看到reduceByKey
API,我看到:
def reduceByKey(func: (V, V) ⇒ V): RDD[(K, V)]
的API状态:使用关联减少功能合并为每个键的值。在将结果发送到Reducer之前,这也将在每个映射器上进行本地合并,类似于MapReduce中的“合并器”。输出将与现有的分区/并行级别进行散列分区。
在节目指南:当要求的(K, V)
对的数据集,返回(K, V)
对其中对于每个键的值被使用给定的降低函数func,它必须是(V,V) => V
类型的聚集的数据集。与groupByKey
一样,reduce任务的数量可通过可选的第二个参数进行配置。
好的,通过这个例子,我知道(x, y)
是(V, V)
,这应该是地图的价值部分。我给出了一个函数来计算V
和我得到RDD[(K, V)]
。我的问题是:在这样的例子中,在reduceByKey(func: (V, V) ⇒ V)
,为什么2 V
?第一个和第二个V
在(V, V)
是否相同?
我想我问这个问题,因此使用问题主题,因为我仍然不知道如何正确读取API,或者我只是想念一些基本的Spark概念?!