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

如何在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程序,并使其模拟键盘按键。因此,例如,可以在聚焦的输入框中键入一些文本。这可能吗? 问题答案: 可能会有所帮助。 这是的一个简单示例代码片段:

  • 我有两对结构为rdd[String,Int]的RDD,称为rdd1和rdd2。 如果我加入前面的RDD,并在结果RDD(mapValues)的值上执行一个函数,那么所有的工作都将在一个worker中完成,而不是在集群的不同worker节点上分配不同的任务。我的意思是,期望的行为应该是在集群允许的这么多节点中并行执行作为参数传递给mapValues方法的函数。