在Spark流式传输中,是否可以将特定的RDD分区分配给集群中的特定节点(为了数据局部性?)
例如,我得到一个事件流[a,a,a,b,b],并有一个2节点的Spark集群。
我希望所有的a总是去节点1,所有的b总是去节点2。
谢啦!
这可以通过为RDD指定自定义分区器来实现。RangeBasedPartitioner将根据范围对RDD进行分区,但您可以使用自定义分区器实现任何分区逻辑。分区相对平衡通常很有用/重要,根据您的输入数据,这样做可能会导致问题(例如散乱等),因此要小心。
因此,如何跨辅助节点对RDD进行分区,是将被分区的单个RDD还是一个完整的批处理。 我可能拿错了。请指引我
主要内容:1.RDD特点:,2.RDD的 5大属性,3.RDD的执行原理,4.Spark的核心组件1.RDD特点: 可变: 存储的弹性 容错的弹性 计算的弹性 分片的弹性 RDD 代码中是一个抽象类, 代表弹性的, 不可变, 可分区, 里面的元素可并行计算的集合, 为弹性分布式数据集。 RDD 不保存数据, 但是有血缘关系。 不可变的是逻辑, 如果想加入新的逻辑, 必须封装。 2.RDD的 5大属性 分区列表 分区计算函数 多个RDD有依赖关系 分区器: 一个分区的规则, 和Kafka 类似
我有两个RDDs。在Spark scala中,如果event1001RDD和event2009RDD具有相同的id,我该如何连接它们? Val事件1001RDD:模式RDD=[事件类型,id,位置,日期1] val event 2009 rdd:schemaRDD =[事件类型,id,日期1,日期2] 预期结果将是:(唯一)(按 id 排序) [事件类型,ID,1001 的位置,1001 的日期1
主要内容:1.From Memory,2.From File,3.From File1.From Memory 这里的makeRDD和parallelize没有区别, make底层用的就是parallelize函数 2.From File 3.From File 第二个方法返回了完整路径
我通读了地图和地图分区之间的理论差异, 但我下面描述的问题更多地基于GC活动 = = 提前感谢。任何帮助都将不胜感激。
我从HDFS中获取数据,并将其存储在Spark RDD中。Spark根据HDFS块的数量创建分区的数量。这会导致大量的空分区,这些分区也会在管道过程中得到处理。为了消除这种开销,我想从RDD中过滤掉所有的空分区。我知道合并和重新分区,但不能保证所有空分区都会被删除。 还有别的办法吗?