首页 > 其他分享 >数据清洗使用Parallel 多线程

数据清洗使用Parallel 多线程

时间:2024-03-21 18:11:07浏览次数:20  
标签:specDesc 重后 specListAll 清洗 多线程 数据 Parallel

一.概述

  在开发数据清洗时,ES数据集有600w条,每一条的子对象又有几十条,需要拿到子对象去重后的集合,使用分批提取ES数据,共535批。开始使用List来操作,关键代码如下:

           var specListAll = new List<SpecInfo>();
            for (int i = 0; i < batchCount; i++)
            {
                //从es提取一批数据
                //每条数据提取子集合到list
               //下面去重后添加到新集合中
                foreach (var specDesc in list)
                {
                    if (specListAll.Count(w => w.NameJoinValue == specDesc.NameJoinValue) == 0)
                        specListAll.Add(specDesc);
                }
            }

   使用计时器,第一批数据执行完耗时3分29秒 ,去重后进入15542个到specListAll集合中,  535批预估共执行31.2小时。

   下面使用Parallel 多线程来实现去重后,添加到新集合中,关键代码如下:

           var specListAll = new ConcurrentBag<SpecInfo>();
            for (int i = 0; i < batchCount; i++)
            {
                //从es提取一批数据
                //每条数据提取子集合到list
                //下面去重后添加到新集合中
                Parallel.ForEach(list, specDesc =>
                {
                    if (specListAll.Count(w => w.NameJoinValue == specDesc.NameJoinValue) == 0)
                        specListAll.Add(specDesc);
                });
            }

   使用计时器,第一批数据执行完耗时2分19秒 ,去重后进入15542个到specListAll集合中,  535批预估共执行20.8小时。

   最后查看CPU,使用Parallel 多线程会高出30%的使用率

 

标签:specDesc,重后,specListAll,清洗,多线程,数据,Parallel
From: https://www.cnblogs.com/MrHSR/p/18087984

相关文章

  • 多线程并发聊天室简单实现代码详解 -- 涉及网络编程,多线程和线程同步的知识
            本项目主要完成多线程并发聊天室的基础功能,即多个客户端之间通过服务器可以实现群发消息,重点在于学习网络编程,多线程和线程同步的基础知识(基于Linux)。    下面我会详解每一部分的代码。1.主线程        1.1首先由于是自己在电脑里面测试,......
  • 一个基于配置文件构建有向无环图,并多线程运行图上节点的例子
    #include<iostream>#include<memory>#include<thread>#include<vector>classNode{public:virtualvoidshow()=0;virtualboolhasFinished(){returnhas_finished_;}protected:boolhas_finished_=false;};classA......
  • C# 多线程锁
    C#多线程锁分类lock(Monitor):lock是C#中的关键字,它实际上是Monitor类的一个简化版本的语法糖。使用方式:lock(obj){//代码块},其中obj是一个对象引用,所有线程都试图获取该对象的互斥锁。功能:确保同一时间只有一个线程可以进入受保护的代码块。应用场景:适用......
  • 多线程:乐观锁
     悲观锁:一上来就加锁,没有安全感。每次只能一个线程进入访问完毕后,再解锁。线程安全,性能较差!乐观锁:一开始不上锁,认为是没有问题的,大家一起跑,等要出现线程安全问题的时候才开始控制。线程安全,性能较好。为什么出现线程安全问题?100个线程每个加100次应该加10000次才对;因为......
  • Java-Java基础学习(3)-多线程(1)
    Java-Java基础学习(4)-多线程(1)3.多线程在Java中,多线程主要的实现方式有四种:继承Thread类、实现Runnable接口、实现Callable接口经过FutureTask包装器来建立Thread线程、使用ExecutorService、Callable、Future实现有返回结果的多线程。3.1.四种创建方式Threadclass==>......
  • redis自学(22)Redis是单线程还是多线程?
    Redis是单线程还是多线程?Redis到底是单线程还是多线程? 如果仅仅聊Redis的核心的业务处理部分(命令处理),答案是单线程 如果是聊整个Redis那么答案是对线程在Redis版本迭代过程中,在两个重要的时间节点上引入了多线程的支持:Redisv4.0:引入多线程异步处理一些耗时较长的任务,......
  • JAVASE各模块结构图:面向对象、常用类、多线程、异常、IO流、集合、网络编程
    ......
  • 深入浅出Java多线程(十三):阻塞队列
    引言大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第十三篇内容:阻塞队列。大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!!在多线程编程的世界里,生产者-消费者问题是一个经典且频繁出现的场景。设想这样一个情况:有一群持续不断地生产资源的线程(我们称之......
  • 数据清洗2
    代码如下:importjsonimportpymysqlimportpandasaspdimportrequestsfromsqlalchemyimportcreate_engine#连接MySQL数据库conn=pymysql.connect(host='localhost',user='root',password='你的密码',db='你的数据库',charset=&#......
  • 多进程并发 v.s.多线程并发
    多进程并发v.s.多线程并发优缺点多进程的优点:独立性:每个进程都有独立的内存空间,相互之间不会影响,数据隔离性好。稳定性:一个进程崩溃通常不会影响其他进程,提高了系统的稳定性。简单的错误处理:进程之间的错误处理相对简单,一个进程崩溃通常只需要重启该进程即可。适用于CP......