Spark中如何按键对RDD进行分区?

2023-11-21

鉴于 HashPartitioner 文档说:

[HashPartitioner] 使用 Java 实现基于哈希的分区 对象.hashCode。

说我要分区DeviceData by its kind.

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

分区是否正确RDD[DeviceData]通过覆盖deviceData.hashCode()方法并仅使用哈希码kind?

但考虑到HashPartitioner需要多个分区参数我很困惑是否需要提前知道种类的数量以及如果种类多于分区会发生什么?

如果我将分区数据写入磁盘,读取时它将保持分区状态,这是否正确?

我的目标是打电话

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

并且只有DeviceData的相同的kind迭代器中的值。


只做一个怎么样groupByKey using kind。或其他PairRDDFunctions method.

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

pair 函数允许这样做:

rdd.keyBy(_.kind).partitionBy(new HashPartitioner(PARTITIONS))
   .foreachPartition(...)

但是,使用类似以下内容可能会更安全一些:

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

or mapValues或其他一些保证您获得整体片段的对函数

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark中如何按键对RDD进行分区? 的相关文章

随机推荐