gpt4 book ai didi

scala - 如何在Spark中按键分区RDD?

转载 作者:行者123 更新时间:2023-12-04 03:15:05 24 4
gpt4 key购买 nike

鉴于 HashPartitioner 文档说:

[HashPartitioner] implements hash-based partitioning using Java's Object.hashCode.



说我要分区 DeviceData由其 kind .
case class DeviceData(kind: String, time: Long, data: String)

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

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

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

我的目标是打电话
  deviceDataRdd.foreachPartition(d: Iterator[DeviceData] => ...)

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

最佳答案

做一个groupByKey怎么样?使用 kind .或者另一个 PairRDDFunctions方法。

您让我觉得您并不真正关心分区,只是在一个处理流程中获得所有特定类型?

配对函数允许:

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

但是,您可能会更安全一点:
rdd.keyBy(_.kind).reduceByKey(....)

mapValues或许多其他配对函数,可确保您将碎片作为一个整体

关于scala - 如何在Spark中按键分区RDD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32544307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com