当前位置: 首页 > 知识库问答 >
问题:

在Spark中将groupByKey替换为reduceByKey

危斯伯
2023-03-14

你好,我经常需要在代码中使用groupbykey,但我知道这是一个非常繁重的操作。由于我正在努力提高性能,我想知道删除所有GroupByKey调用的方法是否有效。

我使用的是out=rdd1.groupbykey,但是由于这种方法对于大型数据集可能会有很大的问题,所以我想使用这个解决方案:

我所做的不是创建类型对(Int,Int)的RDDrdd1,而是创建类型对(Int,list[Int]),所以我的rdd1如下所示

rdd1=[(1,[2]),(1,[3]),(2,[3]),(2,[4]),(3,[5])]

你认为有没有更快的方法来达到同样的结果,使用一些其他的方法?谢谢你。

共有1个答案

马飞
2023-03-14

由于我正在努力提高性能,我想知道删除所有groupByKey调用的方法是否有效。

请查看RDD.todebugstring以查看RDD转换的逻辑计划。这应该会让你很好地了解你的动作会有多快(或不快)。

避免shuffledrdd,因为它们会导致通常非常昂贵的洗牌操作。

rdd.keyBy(_.kind).reduceByKey(....)

阅读org.apache.spark.rdd.pairrddfunctions。

使用web UI可以更好地了解“查询”的性能。了解你的数据会有很大帮助。也要花足够的时间(否则优化查询的时间可能会浪费)。

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

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

  • 所以,我有一个RDD,它有如下键值对。 在groupByKey之后,我希望得到这样的东西 然而,我发现即使在执行groupByKey()之后,也会重复相同的键。键值对的总数肯定会减少,但仍然有许多重复的键。有什么问题吗? 键的类型基本上是一个Java类,其中包含整数类型的字段。火花是否也在考虑对象字段以外的东西来识别这些对象?

  • 这里我想要的是将特定列中的值替换为null,如果它是空字符串。 原因是我使用的是以基于另一列填充数据帧的一列,但我注意到在某些行中,值是而不是,因此函数无法按预期工作。 在上面的例子中,我希望首先用列填充,如果它不为空,如果它为空,则用列等等。但是由于某个时候,列被而不是null填充,我在'resolved_id'中得到了。 我试过用 但基于留档,只有当键和值都是或或时才有效,所以我不能在这里使用

  • 问题内容: 我在MySQL中的运算结果中得到了价值。 有没有办法将这些值转换为值0? 问题答案: 是的,使用。 COALESCE遍历您提供的值列表,并返回第一个非空值。

  • 也许可以在某个配置文件中完成。有人已经做过了吗?