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

如何在Spark中按键划分RDD?

欧镜
2023-03-14

假设我希望根据DeviceData种类对其进行分区。

case class DeviceData(kind: String, time: Long, data: String)

通过覆盖DeviceData.hashcode()方法对rdd[DeviceData]进行分区,并且只使用类型的hashcode是否正确?

但是,鉴于HashPartitioner接受了许多分区参数,我不知道是否需要事先知道种类的数量,如果种类多于分区,会发生什么?

我的目标是打电话

  deviceDataRdd.foreachPartition(d: Iterator[DeviceData] => ...)

并且在迭代器中只有devicedata具有相同的kind值。

共有1个答案

秦才英
2023-03-14

使用kind执行groupbykey怎么样。或其他pairrddfunctions方法

在我看来,您似乎并不真正关心分区,只是在一个处理流中获得了所有特定的类型?

这对函数允许这样做:

rdd.keyBy(_.kind).partitionBy(new HashPartitioner(PARTITIONS))
   .foreachPartition(...)
rdd.keyBy(_.kind).reduceByKey(....)
 类似资料:
  • 假设我创建了这样一个RDD(我使用的是Pyspark): 然后我用方法打印分区元素并获得 Spark是如何决定如何划分我的列表的?元素的特定选择来自哪里?它可以以不同的方式耦合它们,只留下0和10以外的一些其他元素,以创建6个请求的分区。在第二次运行中,分区是相同的。 使用更大的范围,有29个元素,我得到2个元素后跟3个元素的模式的分区: 使用更小范围的9个元素,我得到 因此,我推断Spark是通

  • 我在一个集成api中实现了Swagger,在这种情况下,有必要根据项目组织问题将这些服务按区域分开,但我有以下问题,一些控制器在不同的区域有共同的名称,当Swagger生成文档时,即使按区域分开,如果它一起有相同的控制器名称,我想知道是否也有办法将控制器按区域分开?下面是两个集成:Mercado Livre和Skyhub,它们都位于不同的区域,但如果它们注意到它们加入的类别,因为它们具有相同的控制

  • 我有一个以本地模式运行的Spark流程序,在该程序中,我从TCP套接字连接接收JSON消息,每个批处理间隔几条。 这些消息中的每一条都有一个ID,我用它来创建一个键/值JavaPairDStream,这样在我的JavaDStream中的RDD的每个分区中,都有一个键/值对,每个分区只有一条消息。 我现在的目标是将具有相同ID的消息分组在同一个分区中,以便我可以并行映射它们,每个分区由不同的核心处理

  • 我试图使用Spark主机在EC2上使用本指南对常见爬网数据执行简单转换,我的代码如下所示:

  • 问题内容: 我想运行一个Java程序,并使其模拟键盘按键。因此,例如,可以在聚焦的输入框中键入一些文本。这可能吗? 问题答案: 可能会有所帮助。 这是的一个简单示例代码片段:

  • 问题内容: 我将如何在Python中“按任意键”(或抓住菜单选项)? raw_input要求您按回车键。 Windows msvcrt具有getch()和getche()。 有使用标准库执行此操作的可移植方法吗? 问题答案: