java - 自定义 RDD 的分区提示

标签 java apache-spark

JDBCRDD 可能被分区以在数据库上进行高效的查询并行化。

有没有办法将数据如何划分为下一阶段的有用提示,可能是 groupBy,而不必重新划分数据?

示例:我正在加载日期/地区/值。使用 JDBCRDD 我正在加载按日期分区的数据。如果我想减少/groupBy 日期和区域,我不应该再次对日期进行排序和混洗,并利用 RDD 已经按日期分区的事实。

在一个伪 API 中,我会做如下事情:

RDD rdd = new JDCBCRDD ...
Partitioner partitioning = (Row r)->p(r)
rdd.assertPartitioning(partitioning);
RDD<Pair<Key,Row>> rdd2 = rdd.groupWithinPartition((r)->f(r),Rowoperator::sum);

所以现在理论上,我所有的分组都将在本地 JVM 实例、相同节点、相同 JVM、相同线程中执行。

最佳答案

如果你的意思是需要保留每个元素的分区索引信息,我认为mapWith是你需要的。您可以将分区索引与数据分组到一个新类中并传递到下一阶段。

关于java - 自定义 RDD 的分区提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30473483/

相关文章:

java - 如何将本地jar库添加到Visual Studio代码中?

scala - Scala中如何将DataFrame转换为RDD?

java - spark - 如何减少 JavaPairRDD<Integer, Integer[]> 的洗牌大小?

scala - 如何在 groupBy 之后聚合 map 列?

java - 如何在运行时将java自定义或字符串对象添加到DAO模型对象?

java - 如何根据一列对一维(或二维)数组(多维)进行排序?

java - 用java抓取一个angularjs网站

java - 简单日期格式异常

scala - 作为 Spark 作业提交时 Spark RDD 映射中的 NullPointerException

apache-spark - 在集群 : Initial job has not accepted any resources 上运行 Spark