沙龙晃荡 | 3月31日 京东、微博拭魅战专家与你合营商量容器技巧实践!
如不雅你善于应用Pandas变换数据、创建特点以及清洗数据等,那么你就可以或许轻松地应用Dask和Numba并行加快你的工作。纯真赶紧度上比较,Dask完胜Python,而Numba打败Dask,那么Numba+Dask根本上算是无敌的存在。
将数值计算分成Numba sub-function和应用Dask map_partition+apply,而不是应用Pandas。对于100万行数据,应用Pandas办法和混淆数值计算创建新特点的速度比应用Numba+Dask办法的速度要慢很多倍。
Python:60.9x | Dask:8.4x | Numba:5.8x |Numba+Dask:1x
作为旧金山大年夜学的一名数据科学硕士,会经常跟数据打交道。应用Apply函数是我用来创建新特点或清理数据的浩瀚技能之一。如今,我只是一名数据科学家,而不是计算机科学方面的专家,但我是一个爱好捣鼓并使得代码运行更快的法度榜样员。如今,我将会分享我在并行应用上的经验。
大年夜多Python爱好者可能懂得Python实现的全局说冥器锁(GIL),GIL会占用计算机中所有的CPU机能。更糟糕的是,我们重要的数据处理包,比如Pandas,很少能实现并行处理代码。
Apply函数vs Multiprocessing.map
- %time df.some_col.apply(lambda x : clean_transform_kthx(x))
- Wall time: HAH! RIP BUDDY
- # WHY YOU NO RUN IN PARALLEL!?
Tidyverse已经为处理数据做了一些好梦的工作,Plyr是我最爱好的数据包之一,它许可R说话应用者轻松地并行化他们的数据应用。Hadley Wickham说过:
“plyr是一套处理一组问题的对象:须要把一个大年夜的数据构造分化成一些平均的数据块,之后对每一数据块应用一个函数,最后将所有结不雅组合在一路。”
对于Python而言,我欲望有类似于plyr如许的数据包可供应用。然而,今朝如许的数据包还不存在,但我可以应用处行数据包构成一个简单的解决筹划。
Dask
之前在Spark上花费了一些时光,是以当我开端应用Dask时,照样比较轻易地控制其重点内容。Dask被设计成可以或许在多核CPU上并行处理义务,此外也借鉴了很多Pandas的语律例则。
如今开端本文所举例子。对于比来的数据挑衅而言,我试图获取一个外部数据源(包含很多地舆编码点),并将其与要分析的一大年夜堆街区相匹配。在计算欧几里得距离的同时,应用最大年夜启发式将最大年夜值分派给一个街区。
最初的apply:
- my_df.apply(lambda x: nearest_street(x.lat,x.lon),axis=1)
Dask apply:
- dd.from_pandas(my_df,npartitions=nCores).\
- map_partitions(\
- lambda df : df.apply(\
- lambda x : nearest_street(x.lat,x.lon),axis=1)).\
- compute(get=get)
- # imports at the end
因为我经由过程迭代行来生成一个新队列(特点),而Dask apply只在列上起感化,是以我没有应用Dask apply,以下是Dask法度榜样:
- from dask import dataframe as dd
- from dask.multiprocessing import get
- from multiprocessing import cpu_count
- nCores = cpu_count()
推荐阅读
沙龙晃荡 | 3月31日 京东、微博拭魅战专家与你合营商量容器技巧实践! 单模光纤的纤芯较细,使光线可以或许直接>>>详细阅读
本文标题:Python数据预处理:使用Dask和Numba并行化加速
地址:http://www.17bianji.com/lsqh/40675.html
1/2 1