考拉:考拉是如何工作的呢?

2021年5月26日,下午04:25 (PT)

下载幻灯片

考拉是一个开源项目,它提供bob下载地址了Apache火花熊猫api之上。熊猫是数据科学的标准工具,它通常是第一步探索和操作一个数据集,但熊猫并不规模大数据。熊猫考拉填补这些差距通过提供等价的api, Apache火花。

也有许多图书馆试图规模熊猫api,如Vaex Modin等等。Dask就是其中之一,非常欢迎熊猫用户,也适用于自己的集群类似考拉集群上的火花。在这次演讲中,我们将介绍考拉及其现状和考拉和Dask之间的比较,包括基准测试。

在这个会话表:
Takuya Ueshin,软件工程师,砖
Xinrong孟,开发人员,砖

成绩单

Takuya Ueshin:嗨,每一个人。让我开始我们的谈话。我们的谈话是考拉。考拉也不工作吗?我们做了一些树袋熊的基准,所以我们将分享如何做基准,这里的结果。
砖我Takuya,一个软件工程师和一个Apache火花提交者和PMC成员。我的重点是SQL内部和PySpark火花。现在,我主要从事考拉项目。Xinrong也是一个软件工程师在砖和考拉的维护者。以后她会显示基准和它的结果。
在这次演讲中,我将介绍考拉和熊猫和PySpark。然后,我将展示一些树袋熊的内部结构与PySpark知道考拉是如何工作的。之后,切换到Xinrong她将显示基准。我们比较了与Dask基准测试结果。所以她将大致介绍Dask并显示结果。
首先,让我们看看考拉,熊猫和PySpark。考拉是什么?考拉宣布2019年4月24日,在前面的火花AI峰会。这是我们纯Python库,为大熊猫提供的替代,使效率,扩展到数百名工人日常数据的节点科学和机器学习。每个力量统一两个现有的与我们熟悉的API和帮助小型和大型数据之间的无缝过渡。对于熊猫用户来说,它将帮助大熊猫代码规模和使学习PySpark更加容易。PySpark用户,它将提供更多的生产力,熊猫像功能。
接下来让我们来回顾一下什么是熊猫。熊猫是标准的Python中的数据操作和分析的工具。它深深融入Python数据科学的生态系统,它可以处理许多不同的情况。正如你所看到的堆栈溢出的趋势。大熊猫仍在快速增长。Python数据科学家们倾向于与熊猫开始学习如何分析数据。真的有效对小数据集在一个节点,但不幸的是它不适合用于更大的数据集。数据科学家们学习PySpark或其他库如果他们想处理更大的数据集。
好吧,关于Apache火花是什么?火花是一个事实上的标准统一分析引擎进行大规模数据处理。bob体育亚洲版它支持流媒体、ETL、机器学习等。它提供了PySpark作为Python API,以及为Scala API, Java, R和SQL。熊猫和考拉数据帧的结构提供了熊猫api。也实现了熊猫指数或标识符的概念。例如,考拉提供系列或索引以及数据帧。和它可以捡一些规则基于索引值或其起源指数。另一方面,PySpark数据帧更符合关系在关系数据库或表。所以PySpark api,而只履行相关义务的必要条件。 Even if Koalas objects have the same APIs as PySpark’s, the behavior will be different since it follows on this behavior.
考拉将熊猫api转换为一个逻辑计划引发的SQL,然后计划将由火花秘密引擎执行。执行将延迟这火花秘密优化器可以完成。当一个用户试图表明,收集或存储数据,整个计划将被传递给火花秘密引擎,引擎优化计划,编译并执行它。
然后让我们深入考拉内部结构。在这里,我谈谈名为InternalFrame的内部结构和它是如何工作的和考拉DataFrame之间PySpark DataFrame。InternalFrame主要处于内部的结构,包含四种类型的数据。第一个是当前PySpark DataFrame。整个操作都是基于这个PySpark DataFrame。其次,它管理PySpark当前对象的索引和日期列分离从PySpark DataFrame。这是用于最大化地图边操作没有洗牌和列索引或日期列之间的映射和PySpark列。
当前对象是来自PySpark数据帧和包含更新。例如,DF + 1,不需要创建一个新的PySpark数据帧,但只有更新的列作为每一列坳+ 1。我们可以结合列更新和底层PySpark DataFrame证实结果。同时,它管理指标名称和数据列名因为考拉索引名称或日期列名称并不总是等于PySpark DataFrames列名。因为它可以int,浮动,等等,以及字符串。它也可以像夫妻一样多层次的价值。然而,PySpark列名必须唯一的字符串。Dtypes其他元数据。熊猫Dtypes Dtypes在这种情况下是等价的,不是火花数据类型。这是因为有一些熊猫dtypes只不能由火花数据类型。
例如,熊猫直言dtype,周期性dtype在火花不支持SQL,或者是(听不清)int,浮动,字符串,十亿类型,除了正常的装备对应的类型。最后但并非最不重要,它提供了从熊猫DataFrame战斗到PySpark DataFrame和提取元数据。相反,或从考拉DataFrame收敛到熊猫DataFrame这里提供。它结合了PySpark DataFrame和列,然后将它转换成熊猫DataFrame。直接转换成熊猫DataFrame可能有不同的列名或dtypes。所以它修复的其他元数据。结果必须是预期的熊猫DataFrame。
基本结构是这样,考拉DataFrame InternalFrame, InternalFrame我们经过PySpark DataFrame并持有一些元数据像火花列,索引名称,列名,dtypes等等,正如我所提到的。当我使用考拉API,考拉DataFrame更新PySpark DataFrame和元数据在InternalFrame熊猫像相应的API并创建或复制当前InternalFrame新的统计数据就出现新的考拉DataFrame。
有时更新PySpark DataFrame并不需要,但只有元数据的更新是必需的。新结构将会像这样。例如,重命名列名称或索引名称,不需要使用一个新的PySpark DataFrame或DF + 1,我之前提到的也不需要一个新的。这是可以做到的只有更新火花列。考拉试图避免创建一个新的PySpark DataFrame如果可能,所以考拉可以很容易地计算类似DF1 + DF2。
如果底层PySpark DataFrames DF1和DF2是相同的,它只是一个火花列操作。否则,我们需要结合两个关节PySpark DataFrames。在任何情况下考拉DataFrame永远不会变异InternalFrame,但创建或复制InternalFrame保持不变的。
这是一个粗略的考拉DataFrame的概述。我希望这有助于你理解发生了什么在考拉。现在让我把它交给我的同事,Xinrong,走过基准。

Xinrong孟:谢谢Takuya考拉它内部的介绍。然后,考拉好工作吗?我们进行了一项基准Dask来回答这个问题。Dask什么特别之处呢?Dask是一个并行计算框架。用纯Python编写的,所以可以利用优秀的Python的生态系统。它并行化代码NumPy使用阻塞算法和任务调度的基础。块算法可以评估一个大问题,解决许多小问题。然后Dask任务调度是什么意思?兽人的任务代表一个原子单元由一个工人。 A task graph is built from parallel collections, a scheduler executes task graph on parallel hardware. There are single machine scheduler and distributed scheduler. Dask is great.
Dask不同考拉怎么样?首先,他们有不同的执行引擎。考拉是建立在Apache的火花,这是一个统一的大数据分析引擎。bob体育亚洲版Dask执行引擎本身就是一个图。第二,考拉旨在提供一个代码库,熊猫和火花。如果你已经熟悉的熊猫,你可以立即生产与火花。Dask旨在规模熊猫工作流。第三考拉当前理解查询执行计划是一个入口点。而Dask任务图,我们一开始提到的任务调度器。最后,熊猫考拉雇佣DataFrame api, Dask并行集合,例如数组,DataFrame和包。
清楚Dask和考拉有许多差异,但他们既能规模熊猫。不会一个性能比较是有趣吗?我们进行了一个基准。我们如何设置基准?数据集包含大约150 gb的出租车旅行乘坐汽车。我们的基准共同操作,如基本的统计计算,连接和分组。
这些操作是应用于整个数据集。然后过滤数据,最后缓存过滤数据。过滤后的数据是整个数据的36%。通过这种方式,我们可以理解懒惰的影响评估、缓存和系统相关的优化。这个基准测试中使用的场景的灵感来源于基准(听不清)。然后我们运行基准?基准是跑砖Ranpak之上。我们在单个机器上运行它,然后在集群。集群有四个节点。它有相同的总内存单独的机器。 We ensured both Dask and Koalas to run in the distributed mode.
这里有一个基准测试结果的概述。考拉执行,Dask基准。考虑简单平均在本地模式下,考拉是快四倍。在集群模式下,考拉快8倍左右。考拉api编写PySpark。所以结果同样适用于PySpark。
你有兴趣详细结果?让我们看一些情节。情节中的每一栏显示了一个操作的执行时间。Dasks执行计划比考拉执行计划带注释的每个操作。例如,2 x意味着考拉Dask一样快两倍。图左边是本地模式。而右边的情节是用于分布式模式。
首先让我们看一下操作,适用于整个数据集。在本地模式下,考拉的平均1.2倍。操作数在加入17倍。在分布式模式中,考拉是平均Dask一样快两倍。统计指数操作快25倍。然后我们应用相同的操作来过滤数据。懒洋洋地过滤计算一起操作。在本地模式下,考拉的平均6倍。计数操作11倍。在集群模式下,考拉是平均9倍。统计指数操作是16倍。
最后,我们缓存过滤后的数据然后应用相同的操作。在这里,数据测量任何操作之前完全缓存。在当地执行,考拉是平均超过1.4倍。操作数时加入快六倍。在集群模式下,考拉是平均速度快五倍。统计指数手术28倍。
你想知道为什么考拉是快?正如我们提到的,考拉是基于Apache火花。核心或火花SQL优化器是催化剂。最重要的催化剂,我们有代码生成生成Optimax Ranpak坏的电话。他们都显著加速考拉。了解催化剂的影响,我们观察的主要计算过滤数据。我们过滤的原始数据(听不清),然后计算平均图。当前的计划之前催化剂优化使用蛮力阅读所有列。
然后用过滤器执行多次投影在中间。这是低效的,因为它需要更多的数据。花更多的时间在I / O和执行相同的预测,很多次了。催化剂优化后的查询计划变得更简单。现在只有利率计算所需的列和过滤数据在源水平,节省了内存的使用。
让我们继续代码生成。我们把两个操作过滤数据为例,没有代码生成,意味着计算需要八秒,数当加入操作文本27秒。代码生成,计算平均需要1秒和加入计数操作需要两秒。这是一个巨大的进步。
基准测试结果表明,第一,SQL优化器计划等引发DataFrame api的SQL可以提高性能。第二,缓存加速考拉和Dask显著。第三,在基准,考拉优于Dask在大多数用例。
我想添加,不同的项目有不同的是,尽管我们跑的基准是可再生的,我们尽力在整个过程中是公平的。他们可能会无意识的偏见。基准的主要目的是建立SQL优化器影响DataFrame api。如果你想知道更多关于基准,请查看博客文章的引用。好吧,这是我们的基准测试的结束部分。
然后有什么新的考拉吗?自2020年引发AI峰会以来,考拉已经发布了9个版本。让我们看看主要的变化。阴谋支持提高通过实现π,直方图和盒子情节与情节。情节是我们违约情节现在后端。基本扩展dtypes分类数据和int8数据等支持。更多的文字介绍了指数指标和int64指标如日期选项卡。API支持扩展,所以您可以注册您的自定义配件的框架、系列和索引。Python支持是增强通过允许返回利用熊猫实例和列名。
还有更多令人兴奋的消息。我们会向PySpark港口考拉。与熊猫PySpark api层,用户可以利用他们现有的火花集群规模大熊猫的工作负载。他们也可以轻松切换熊猫api和PySpark api。如果你想了解更多,请查看JIRA票。这是考拉的更新。感谢你邀请我们Takuya和我都乐意回答任何问题。

Takuya Ueshin

Takuya Ueshin砖,是一个软件工程师和一个Apache火花提交者和PMC成员。他的主要兴趣是在火花SQL内部,也就是催化剂,PySpark。他是一个……
阅读更多

Xinrong孟

Xinrong砖是一个软件工程师。她的主要利益是考拉和PySpark。她是考拉项目的主要贡献者之一。
阅读更多