当前位置: 首页 > 面试题库 >

Apache Spark-reducebyKey-Java-

赫连坚
2023-03-14
问题内容

我正在尝试reduceByKey使用java作为编程语言来了解Spark中的工作。

说我有一句话“我就是我”。我把句子分解成单词并将其存储为列表[I, am, who, I, am]

现在,此函数将分配1给每个单词:

JavaPairRDD<String, Integer> ones = words.mapToPair(new PairFunction<String, String, Integer>() {
    @Override
    public Tuple2<String, Integer> call(String s) {
        return new Tuple2<String, Integer>(s, 1);
    }
});

所以输出是这样的:

(I,1) 
(am,1)
(who,1)
(I,1)
(am,1)

现在,如果我有3个reducer运行,则每个reducer将获得一个键和与该键关联的值:

reducer 1:
    (I,1)
    (I,1)

reducer 2:
    (am,1)
    (am,1)

reducer 3:
    (who,1)

我想知道

一个。在下面的函数中到底发生了什么。
b。参数是什么new Function2<Integer, Integer, Integer>
c。基本上,JavaPairRDD是如何形成的。

JavaPairRDD<String, Integer> counts = ones.reduceByKey(new Function2<Integer, Integer, Integer>() {
    @Override
    public Integer call(Integer i1, Integer i2) {
        return i1 + i2;
    }
});

问题答案:

我认为您的问题围绕着reduce函数,这是2个参数返回1的函数,而在Reducer中,您实现了多对多函数。

如果不太通用,则此API更简单。在这里,您提供了一个关联操作,该操作可以将任意2个值减小为1(例如,两个整数总和为1)。这用于将每个键的所有值都减小为1。由于可以使用2对1函数来实现,所以不必提供N对1函数。在这里,您不能为一个键发出多个值。

结果是每个(键,一堆值)的(键,减值)。

实际上,经典Hadoop
MapReduce中的Mapper和Reducer都非常相似(只是每个键采用一组值而不是单个值),并允许您实现很多模式。以一种好的方式,以一种浪费和复杂的方式。

您仍然可以重现Mappers和Reducers的html" target="_blank">功能,但是Spark中的方法是mapPartitions,可能与groupByKey配对。这些是您可能考虑的最一般的操作,我并不是说您
应该 在Spark中以这种方式模拟MapReduce。实际上,它不太可能有效。但是有可能。



 类似资料:
  • 我有一个基于maven的scala/java混合应用程序,可以提交spar作业。我的应用程序jar“myapp.jar”在lib文件夹中有一些嵌套的jar。其中之一是“common.jar”。我在清单文件中定义了类路径属性,比如。Spark executor抛出在客户端模式下提交应用程序时出错。类(com/myapp/common/myclass.Class)和jar(common.jar)在那里

  • 我使用的是Spark 1.5/1.6,我想在DataFrame中执行reduceByKey操作,我不想将df转换为rdd。 每行看起来像,我有多行id1。 我想有这样的东西: 所以,对于每个“id1”,我希望所有记录都列在一个列表中 顺便说一句,我不想将df转换为rdd的原因是,我必须将这个(减少的)数据帧连接到另一个数据帧,并且我正在对连接键进行重新分区,这使得它更快,我想rdd也不能这样做 任

  • 主要内容:reduceByKey函数的示例在Spark中,函数是一种常用的转换操作,它执行数据聚合。它接收键值对(K,V)作为输入,基于键聚合值并生成(K,V)对的数据集作为输出。 reduceByKey函数的示例 在此示例中,我们基于键聚合值。要在Scala模式下打开Spark,请按照以下命令操作。 使用并行化集合创建RDD。 现在,可以使用以下命令读取生成的结果。 应用函数来聚合值。 现在,可以使用以下命令读取生成的结果。

  • 这是这里的后续问题。我正试图在这个实现的基础上实现k-means。它工作得很好,但我想用替换,但我不确定如何替换(我现在不担心性能)。以下是相关的简化代码: 请注意,将给出: 地图(23)- 和: 在地图kmeans.scala:75 相关问题:在ApacheSpark(Scala)中使用reduceByKey。 一些文件: DEF还原ByKey(func:(V, V)0020 V): RDD[(

  • 给定一个包含以下格式数据的大文件(V1,V2,…,VN) 我正在尝试使用Spark获得一个类似于下面的配对列表 我尝试了针对一个较旧的问题所提到的建议,但我遇到了一些问题。例如, 我得到了错误, 有人能告诉我哪些地方我可能做得不对,或者有什么更好的方法可以达到同样的效果?非常感谢。

  • 我有一个项目的RDD,还有一个函数 。 收集RDD的两个小样本,然后这两个数组。这很好,但无法扩展。 有什么想法吗? 谢谢 编辑:下面是如何压缩每个分区中具有不同项数的两个示例: 关键是,虽然RDD的. zip方法不接受大小不等的分区,但迭代器的. zip方法接受(并丢弃较长迭代器的剩余部分)。