- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了 Apache Spark 的以下代码片段:
JavaRDD<String> lines = new JavaSparkContext(sparkSession.sparkContext()).textFile("src\\main\\resources\\data.txt");
JavaPairRDD<String, Integer> pairs = lines.mapToPair(s -> new Tuple2(s, 1));
System.out.println(pairs.collect());
JavaPairRDD<String, Integer> counts = pairs.reduceByKey((a, b) -> a + b);
System.out.println("Reduced data: " + counts.collect());
我的data.txt如下:
Mahesh
Mahesh
Ganesh
Ashok
Abnave
Ganesh
Mahesh
输出为:
[(Mahesh,1), (Mahesh,1), (Ganesh,1), (Ashok,1), (Abnave,1), (Ganesh,1), (Mahesh,1)]
Reduced data: [(Ganesh,2), (Abnave,1), (Mahesh,3), (Ashok,1)]
虽然我理解如何获得第一行输出,但我不明白如何获得第二行,即JavaPairRDD<String, Integer> counts
由 reduceByKey
组成.
我发现signature的reduceByKey()
如下:
public JavaPairRDD<K,V> reduceByKey(Function2<V,V,V> func)
Function2.call()
的[签名]( http://spark.apache.org/docs/1.2.0/api/java/org/apache/spark/api/java/function/Function2.html#call(T1 , T2))如下:
R call(T1 v1, T2 v2) throws Exception
reduceByKey()
的解释内容如下:
Merge the values for each key using an associative reduce function. This will also perform the merging locally on each mapper before sending results to a reducer, similarly to a "combiner" in MapReduce. Output will be hash-partitioned with the existing partitioner/ parallelism level.
现在这个解释对我来说听起来有点令人困惑。 reduceByKey()
的功能可能还有更多功能。通过查看 reduceByKey()
的输入和输出和Function2.call()
,我感觉不知何故reducebyKey()
将相同键的值发送到 call()
成对。但这听起来并不明确。谁能解释一下到底如何reduceByKey()
和Function2.call()
一起工作吗?
最佳答案
顾名思义,reduceByKey()
根据您传递给它的 lambda 函数来减少数据。
在您的示例中,此函数是一个简单的加法器:对于 a
和 b
,返回 a + b
。了解结果如何形成的最好方法是想象内部发生的情况。 ByKey()
部分根据键值对记录进行分组。在您的示例中,您将有 4 组不同的对:
第 1 组:((Mahesh, 1), (Mahesh, 1), (Mahesh, 1))
第二组:((Ganesh, 1), (Ganesh, 1))
第 3 组:((Ashok, 1))
第 4 组:((Abnave, 1))
现在,reduce
部分将尝试使用 lambda 函数(加法器)来减少之前的 4 个集合:
对于第 1 组:(Mahesh, 1 + 1 + 1) -> (Mahesh, 3)
对于第 2 组:(Ganesh, 1 + 1) -> (Ganesh, 2)
对于第 3 组:(Ashok,1) -> (Ashok,1)(无需添加)
对于第 4 组:(Abnave, 1) -> (Abnave, 1)(无需添加)
函数签名有时可能会令人困惑,因为它们往往更通用。
关于java - 了解 JavaPairRDD.reduceByKey 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50248695/
我正在尝试执行 JavaPairRDD 和 JavaPairRDD 的 leftOuterJoin> 并且函数签名返回类型是 JavaPairRDD>>> 这里可选的是 com.google.comm
我正在 java 中使用 Spark。我有一个名为 Out1 的 JavaPairRDD 输出1: IDCLIENT|INFO| 1|A| 1|C| 1|H| 5|R|
我有两个 JavaPairRDD。 JavaPairRDD, CustomObject> originalData = ...; JavaPairRDD newData = ...; 在这种情况下,C
JavaPairRDD一个: [(A, 0), (B, 0), (C, 0), (D, 0), (E, 0)... ] JavaPairRDD二: [(B, 1), (C, 5), (D, 21)]
我有一个 Person 类的对象列表。我想将它转换成 JavaPairRDD。 我想创建成对的 Object,BSONObject 类型,以便将它们存储在 MongoDB 中。 最佳答案 我不确定您想
使用 Spark,我的算法的中间步骤之一将输出(Key,Vector)到 PairRDD。此步骤完成后,我想生成所有可能的 Key 的 2 组合,并对它们的值执行进一步的操作,即我想要一个带有 ((K
我正在 Apache Spark 中做一个简单的 WordCount 示例,现在我终于得到了单词数我只想从中过滤唯一的单词。 public class SparkClass { public
我有一个 JavaPaidRDD,我试图根据某些条件迭代并返回元素,而不是 JavaPaidRDD 中的所有记录。 请参阅下面的代码我想要实现的目标。 如果Optional有任何元素Present[i
我有一个名为“rdd”的javaPairRDD,它的元组定义为: 我想使用 max() 函数提取最高的 key ,但它需要一个比较器作为参数,请给我一个如何做到这一点的示例!!! example:
SparkSession.createDataset()只允许List, RDD, or Seq - 但它不支持JavaPairRDD 。 如果我有 JavaPairRDD我想创建一个 Dataset
我正在尝试按值对 RDD 进行排序,如果多个值相等,那么我需要按字典顺序对这些值进行排序。 代码: JavaPairRDD rddToSort = rddMovieReviewReducedByKe
与 apache spark 合作使用 Java .我收到了 JavaPairRDD我想按其值对这个数据集进行排序。不过好像只有sortByKey其中的方法。我如何按 Long 的值对其进行排序类型?
我遇到了 Apache Spark 的以下代码片段: JavaRDD lines = new JavaSparkContext(sparkSession.sparkContext()).textFil
我正在使用 ElasticSearch-Hadoop 库从 ElsticSearch 获取数据。 JavaPairRDD> esRDD = JavaEsSpark.esRDD(sc); 现在我有了 J
我是 Apache Spark 新手。正如标题所示,我有一个 JavaPairRdd我想生成一个JavaRdd键和 JavaPairRdd 的值的串联。这可能吗? 示例: ("1,Nick", "ma
我有一个像这样的RDD: JavaPairRDD 有很多条目,并且某些键重复了很多次。当我应用groupByKey或combineByKey时,它会生成另一个 JavaPairRDD 问题是,对于某些
我有 JavaPairRDD 格式的数据 JavaPairdRDD>> 我尝试使用下面的代码 Encoder>> encoder2 = Encoders.tuple(Encoders.STRING
有一些方法可以将 Dataset 转换为 JavaRDD 。 Dataset dataFrame; JavaRDD data = dataFrame.toJavaRDD(); 是否有任何其他方法可以将
我有一个 JavaRDD>并需要将其转换为 JavaPairRDD .目前我只是通过简单地编写 map 函数来完成它,该函数只按原样返回输入元组。但是不知道有没有更好的方法呢? 最佳答案 JavaPa
我是 Spark 的新手,我想了解这两个 JavaRDD 与 JavaPairRDD 之间的区别,以及如果我将 JavaRDD 转换为 JavaPairRDD,这个操作会有多繁重 JavaRDD> m
我是一名优秀的程序员,十分优秀!