Partitioner.Create(1,10,4).GetDynamicPartitions()
为长度为10的序列创建分区,每个分区至多4个元素,分区方法及结果:Partitioner.Create(0, 10, 4).GetDynamicPartitions()
得到3个前闭后开区间: [0, 4)即{0, 1, 2, 3}, [4, 8)即{4, 5, 6, 7}, [8, 10)即{8, 9},  注意被枚举的数字均为数组下标;
为长度为10的序列创建分区,至多4个分区,分区方法及结果: Partitioner.Create(0, 10, 3).GetDynamicPartitions()
得到4个前闭后开区间: [0,3)即{0, 1, 2}, [3, 6)即{3, 4, 5}, [6, 9)即{6, 7, 8}, [9, 10)即{9}, 注意被枚举的数字均为数组下标;
定义分区个数 = 定义并发线程(笔者这样讲并不严格), 故定义方法如下:
private static void NewMethod<T>(IList<T> array, Int32 rangeCount) {
    var rangeSize = (Int32)Math.Ceiling(array.Count / (Double)rangeCount);
    var part = Partitioner.Create(0, array.Count, rangeSize);
    Parallel.ForEach(part, (range, state, rangeIndex) => {
        for (Int32 index = range.Item1; index < range.Item2; index++) {
            Console.WriteLine("[{0,2}] {1} {2}", Thread.CurrentThread.ManagedThreadId, rangeIndex, index);
        }
    });
}
对于分区个数定义为3, 可以看到线程ID 在1,3,4中切换, 线程[1]遍历了4个元素, 线程[3]遍历了4个元素, 线程[4]遍历了2个元素
对于分区个数定义为4, 可以看到线程ID 在1, 3, 4, 5中切换, 线程[1]遍历了3个元素, 线程[3]遍历了3个元素, 线程[4]遍历了3个元素, 线程5遍历了1个元素.

Parallel中分区器Partitioner的简单使用的更多相关文章

  1. MapReduce之自定义分区器Partitioner

    @ 目录 问题引出 默认Partitioner分区 自定义Partitioner步骤 Partition分区案例实操 分区总结 问题引出 要求将统计结果按照条件输出到不同文件中(分区). 比如:将统计 ...

  2. RDD(六)——分区器

    RDD的分区器 Spark目前支持Hash分区和Range分区,用户也可以自定义分区,Hash分区为当前的默认分区,Spark中分区器直接决定了RDD中分区的个数.RDD中每条数据经过Shuffle过 ...

  3. 028 Partitioner:数据分区器

    Partitioner:数据分区器,决定数据到下一个RDD的时候在那一个分区 HashPartitioner:根据key的hashCode值来实现 RangePartitioner: 根据key所属范 ...

  4. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  5. 大数据学习day19-----spark02-------0 零碎知识点(分区,分区和分区器的区别) 1. RDD的使用(RDD的概念,特点,创建rdd的方式以及常见rdd的算子) 2.Spark中的一些重要概念

    0. 零碎概念 (1) 这个有点疑惑,有可能是错误的. (2) 此处就算地址写错了也不会报错,因为此操作只是读取数据的操作(元数据),表示从此地址读取数据但并没有进行读取数据的操作 (3)分区(有时间 ...

  6. 在Parallel中使用DbSet.Add()发现的一系列多线程问题和解决过程

    发现问题 需求很简单,大致就是要批量往数据库写数据,于是打算用Parallel并行的方式写入,希望能利用计算机多核特性加快程序执行速度.想的很美好,于是快速撸了类似下面的一串代码: using (va ...

  7. Spark源码分析之分区器的作用

    最近因为手抖,在Spark中给自己挖了一个数据倾斜的坑.为了解决这个问题,顺便研究了下Spark分区器的原理,趁着周末加班总结一下~ 先说说数据倾斜 数据倾斜是指Spark中的RDD在计算的时候,每个 ...

  8. 玩转Kafka的生产者——分区器与多线程

    上篇文章学习kafka的基本安装和基础概念,本文主要是学习kafka的常用API.其中包括生产者和消费者, 多线程生产者,多线程消费者,自定义分区等,当然还包括一些避坑指南. 首发于个人网站:链接地址 ...

  9. kafka producer partitions分区器(七)

    消息在经过拦截器.序列化后,就需要确定它发往哪个分区,如果在ProducerRecord中指定了partition字段,那么就不再需要partitioner分区器进行分区了,如果没有指定,那么会根据k ...

随机推荐

  1. Django的admin.py注册流程

    通常创建一个Django项目的时候,在Django的配置文件settings.py中,都会有下面的这段配置: INSTALLED_APPS = [ 'django.contrib.admin', 'd ...

  2. python3,进程间的通信

    本文来源于python 3.5版本的官方文档 multiprocessing模块为进程间通信提供了两种方法: 1.进程队列queue The Queue class is a near clone o ...

  3. python各种运算优先级一览表

    ##python各种运算的优先级 运算符 描述 lambda Lambda表达式 or 布尔"或" and 布尔"与" not x 布尔"非" ...

  4. Python基础篇(八)

    key words:私有变量,类静态变量,生成器,导入Python模块,r查看模块可以使用的函数,查看帮助信息,启动外部程序,集合,堆,时间模块,random模块,shelve模块,文件读取等 > ...

  5. C++/C高质量编程指南-笔记

    复习: C/C++高质量编程指南: [规则1-2-1]为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块. [规则1-2-2]用 #include <file ...

  6. BZOJ 2741: 【FOTILE模拟赛】L [分块 可持久化Trie]

    题意: 区间内最大连续异或和 5点调试到现在....人生无望 但总算A掉了 一开始想错可持久化trie的作用了...可持久化trie可以求一个数与一个数集(区间中的一个数)的最大异或和 做法比较明显, ...

  7. 原生js贪吃蛇

    <!DOCTYPE html> <html> <head> <title></title> <meta charset="u ...

  8. pycharm导入模块的时候遇到的两个错误

    1.from 包 import AES import后面一定是一个空格!!!!! 2.包的导入 上面多了一层报错 错误的原因是最外层多了一个pythonProject目录.改成下面的ok. 原因大佬这 ...

  9. 【Tools】ubuntu无法virtualenv创建python虚拟环境的解决

    刚有人问我Ubuntu python虚拟环境无法创建问题,报错same file error,防止今后遇到忘记,记录下可能的问题. 1.先在windows上试了下: pip install virtu ...

  10. 常用VI操作命令

    # ------------------- VI basic ------------------------------- # file name: VI_basic # author : # da ...