首页
技术笔记
网址导航
Json在线解析
二维码
Ip地址查询
在线流程图
新用户注册
|
会员登录
在线工具
开发笔记
毒鸡汤
网址导航
免费在线流程图
15赞
269
当前位置:
开发笔记
>
编程语言
> 正文
Python 适合大数据量的处理吗?
作者:linjiabin43 | 2021-09-08 09:06
python能处理数据库中百万行级的数据吗?处理大规模数据时有那些常用的python库,他们有什么优缺点?适用范围如何?
python 能处理数据库中百万行级的数据吗?
处理大规模数据时有那些常用的python库,他们有什么优缺点?适用范围如何?
回复内容:
需要澄清两点之后才可以比较全面的看这个问题:
1. 百万行级不算大数据量,以目前的互联网应用来看,大数据量的起点是10亿条以上。
2. 处理的具体含义,如果是数据载入和分发,用python是很高效的;如果是求一些常用的统计量和求一些基本算法的结果,python也有现成的高效的库,C实现的和并行化的;如果是纯粹自己写的算法,没有任何其他可借鉴的,什么库也用不上,用纯python写是自讨苦吃。
python的优势不在于运行效率,而在于开发效率和高可维护性。针对特定的问题挑选合适的工具,本身也是一项技术能力。 我很喜欢用python,用python处理数据是家常便饭,从事的工作涉及nlp,算法,推荐,数据挖掘,数据清洗,数据量级从几十k到几T不等,我来说说吧
百万级别数据是小数据,python处理起来不成问题,python处理数据还是有些问题的
Python处理大数据的劣势:
1. python线程有gil,通俗说就是多线程的时候只能在一个核上跑,浪费了多核服务器。在一种常见的场景下是要命的:并发单元之间有巨大的数据共享或者共用(例如大dict),多进程会导致内存吃紧,多线程则解决不了数据共享的问题,单独的写一个进程之间负责维护读写这个数据不仅效率不高而且麻烦
2. python执行效率不高,在处理大数据的时候,效率不高,这是真的,pypy(一个jit的python解释器,可以理解成脚本语言加速执行的东西)能够提高很大的速度,但是pypy不支持很多python经典的包,例如numpy(顺便给pypy做做广告,土豪可以捐赠一下PyPy - Call for donations
)
3. 绝大部分的大公司,用java处理大数据不管是环境也好,积累也好,都会好很多
Python处理数据的优势(不是处理大数据):
1. 异常快捷的开发速度,代码量巨少
2. 丰富的数据处理包,不管正则也好,html解析啦,xml解析啦,用起来非常方便
3. 内部类型使用成本巨低,不需要额外怎么操作(java,c++用个map都很费劲)
4. 公司中,很大量的数据处理工作工作是不需要面对非常大的数据的
5. 巨大的数据不是语言所能解决的,需要处理数据的框架(hadoop, mpi。。。。)虽然小众,但是python还是有处理大数据的框架的,或者一些框架也支持python
6. 编码问题处理起来太太太方便了
综上所述:
1. python可以处理大数据
2. python处理大数据不一定是最优的选择
3. python和其他语言(公司主推的方式)并行使用是非常不错的选择
4. 因为开发速度,你如果经常处理数据,而且喜欢linux终端,而且经常处理不大的数据(100m一下),最好还是学一下python
python数据处理的包:
1. 自带正则包, 文本处理足够了
2. cElementTree, lxml 默认的xml速度在数据量过大的情况下不足
3. beautifulsoup 处理html
4. hadoop(可以用python) 并行处理,支持python写的map reduce,足够了, 顺便说一下阿里巴巴的odps,和hadoop一样的东西,支持python写的udf,嵌入到sql语句中
5. numpy, scipy, scikit-learn 数值计算,数据挖掘
6. dpark(搬楼上的答案)类似hadoop一样的东西
1,2,3,5是处理文本数据的利器(python不就处理文本数据方便嘛),4,6是并行计算的框架(大数据处理的效率在于良好的分布计算逻辑,而不是什么语言)
暂时就这些,最好说一个方向,否则不知道处理什么样的数据也不好推荐包,所以没有头绪从哪里开始介绍这些包 这要看具体的应用场景,从本质上来说,我们把问题分解为两个方面:
1、CPU密集型操作
即我们要计算的大数据,大部分时间都在做一些数据计算,比如求逆矩阵、向量相似度、在内存中分词等等,这种情况对语言的高效性非常依赖,Python做此类工作的时候必然性能低下。
2、IO密集型操作
假如大数据涉及到频繁的IO操作,比如从数据流中每次读取一行,然后不做什么复杂的计算,频繁的输入输出到文件系统,由于这些操作都是调用的操作系统接口,所以用什么语言已经不在重要了。
结论
用Python来做整个流程的框架,然后核心的CPU密集操作部分调用C函数,这样开发效率和性能都不错,但缺点是对团队的要求又高了(尤其涉及到Python+C的多线程操作)...所以...鱼与熊掌不可兼得。如果一定要兼得,必须得自己牛逼。 我们公司每天处理数以P记的数据,有个并行grep的平台就是python做的。当初大概是考虑快速成型而不是极限速度,但是事实证明现在也跑得杠杠的。大数据很多时候并不考虑太多每个节点上的极限速度,当然速度是越快越好,但是再更高层次做优化(比如利用data locality减少传输,建索引快速join,做sample优化partition,用bloomfilter快速测试等等),把python换成C并不能很大程度上提升效率。 很多python库的实现都是用其他语言写的(C比较多),只是用Python做了个包装而已。库的效率本身不低。 码代码比程序时间复杂度更cost 很多机器学习,神经网络,数据计算的算法已经存在几十年了,这些零零散散的工具多被C和Fortran实现,直到有人开始用Python把这些工具集合到一起,所以,表面上是在用Python的库,实际上是C和Fortran的程序,性能上也并无大的影响,如果你真的是大数据的话 大量數據處理的瓶頸是在IO,而不是在哪個語言。語言選擇真的是要看個人口味、品味。 流处理是python最大软肋 使用python可以,但对速度要求较高的关键模块,还是要用C重写。
推荐阅读
程序员
如何使用重复创建带有可选参数的Rust宏?
如何解决《如何使用重复创建带有可选参数的Rust宏?》经验,为你挑选了1个好方法。 ...
[详细]
程序员
使用Cordova/Angular JS从用户位置获取地址
如何解决《使用Cordova/AngularJS从用户位置获取地址》经验,为你挑选了1个好方法。 ...
[详细]
程序员
jVectorMaps图像标记
如何解决《jVectorMaps图像标记》经验,为你挑选了1个好方法。 ...
[详细]
程序员
用正方形构建金字塔的算法
如何解决《用正方形构建金字塔的算法》经验,为你挑选了1个好方法。 ...
[详细]
程序员
d == 9000000000000000000d无限循环
如何解决《d==9000000000000000000d无限循环》经验,为你挑选了1个好方法。 ...
[详细]
程序员
获得范围内频率平均值的最快方法
如何解决《获得范围内频率平均值的最快方法》经验,为你挑选了2个好方法。 ...
[详细]
程序员
如何检查T是否是泛型方法中的对象列表
如何解决《如何检查T是否是泛型方法中的对象列表》经验,为你挑选了1个好方法。 ...
[详细]
程序员
node.js opc ua许多受监控的项目
如何解决《node.jsopcua许多受监控的项目》经验,为你挑选了0个好方法。 ...
[详细]
程序员
Mvc完成异步脚本加载
如何解决《Mvc完成异步脚本加载》经验,为你挑选了0个好方法。 ...
[详细]
程序员
Chrome for IOS CORS
如何解决《ChromeforIOSCORS》经验,为你挑选了0个好方法。 ...
[详细]
程序员
`std :: shared_ptr`的自动循环断路器的可行性
如何解决《`std::shared_ptr`的自动循环断路器的可行性》经验,为你挑选了2个好方法。 ...
[详细]
程序员
在调试时,我可以从浏览器控制台访问Redux存储吗?
如何解决《在调试时,我可以从浏览器控制台访问Redux存储吗?》经验,为你挑选了3个好方法。 ...
[详细]
程序员
如何使用API在pod(kubernetes)中执行命令?
如何解决《如何使用API在pod(kubernetes)中执行命令?》经验,为你挑选了0个好方法。 ...
[详细]
程序员
即使在使用pack()之后,winfo_width()也返回1
如何解决《即使在使用pack()之后,winfo_width()也返回1》经验,为你挑选了1个好方法。 ...
[详细]
程序员
将数据库导入DataGrip(0xDBE)
如何解决《将数据库导入DataGrip(0xDBE)》经验,为你挑选了1个好方法。 ...
[详细]
程序员
如何在SQL Server 2008中将数据转换为json格式?
如何解决《如何在SQLServer2008中将数据转换为json格式?》经验,为你挑选了0个好方法。 ...
[详细]
程序员
行尾(GNU文档)
如何解决《行尾(GNU文档)》经验,为你挑选了1个好方法。 ...
[详细]
程序员
scikit学习系数多项式特征
如何解决《scikit学习系数多项式特征》经验,为你挑选了1个好方法。 ...
[详细]
程序员
Vim折叠,没有结束标记
如何解决《Vim折叠,没有结束标记》经验,为你挑选了0个好方法。 ...
[详细]
程序员
从深层嵌套的目录结构导入模块
如何解决《从深层嵌套的目录结构导入模块》经验,为你挑选了1个好方法。 ...
[详细]
吐了个 "CAO" !
吐个槽吧,看都看了
会员登录
|
用户注册
linjiabin43
这个屌丝很懒,什么也没留下!
关注作者
Tags | 热门标签
actionscrip
bash
c#
c++
c语言
erlang
flutter
go
golang
java
javascript
lua
node.js
perl
php
python
scala
typescript
RankList | 热门文章
1
如何在zookeeper中删除非空的数据节点?
2
在azure AD中为sharepoint在线创建应用程序
3
使用less.js获取更少的变量列表
4
Tomcat 8上的AntiResourceLocking
5
我的SQL SELECT查询有什么问题?
6
Oracle从类型号数组中获取distict值
7
每次符号在值列表中更改时计算差异
8
在Javascript中使用reduce来对空数组和非空数组求和
9
为什么preg_match会返回一些空元素?
10
不幸的是,相机已停止
11
展开/折叠动画:小滞后|| MeasureSpec返回错误的值
12
转换为十进制并执行OrderBy
13
在c#中捕获鼠标单击事件
14
Exchange FindItem使用一组商品ID和多个商品ID的不同属性集进行响应
15
在整个应用程序中禁用UITextField的自动更正
16
终端&&非终端递归调用
17
WebGL中多个绘制缓冲区上的readPixels
18
如何在我的函数场景中使用标签Cucumber.js?
19
重新排序列表以最大化相邻元素的差异
20
Flexbox和溢出隐藏不正常
DevBox开发工具箱 | 专业的在线开发工具网站
京公网安备 11010802040832号
|
京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有