考拉:apache spark上的pandas api

koalas的Python项目详细描述


考拉:apache spark上的pandas api

考拉项目通过在apache spark上实现pandas dataframe api,使数据科学家在与大数据交互时更有效率。

pandas是python中事实上的标准(单节点)数据帧实现,而spark是大数据处理的事实上的标准。使用此软件包,您可以:

  • 如果你对熊猫已经很熟悉了,那就立即用spark提高效率,不要有学习曲线。
  • 有一个单独的代码库,它既适用于pandas(测试,较小的数据集),也适用于spark(分布式数据集)。

这个项目目前处于测试阶段,并且正在快速发展,每周发布一次cadence。我们希望您尝试一下,并通过我们的邮件列表github问题

构建状态codecovdocumentation status最新版本conda version

目录

依赖关系

  • cmake用于构建pyarrow
  • 火花2.4.一些旧版本的spark也可以工作,但它们不受官方支持。
  • 熊猫的最新版本。它是针对0.23+而正式开发的,但其他一些版本也可能工作。
  • 巨蟒3.5+。

开始

考拉可以在python包索引中找到:

pip install koalas

或者使用Conda软件包管理器:

conda install koalas -c conda-forge

如果这无法安装pyarrow依赖项,您可能希望尝试使用python 3.6.x安装,因为pip install arrow无法在3.7的开箱即用https://github.com/apache/arrow/issues/1125" rel="nofollow">https://github.com/apache/arrow/issues/1125。

如果您没有Spark环境,您还应该安装pysparkpackage by:

pip install 'pyspark>=2.4'

conda install 'pyspark>=2.4' -c conda-forge

或下载发行版。

安装包后,您可以导入包:

importdatabricks.koalasasks

现在,您可以将pandas数据帧转换为符合api的考拉数据帧:

importpandasaspdpdf=pd.DataFrame({'x':range(3),'y':['a','b','b'],'z':['a','b','b']})# Create a Koalas DataFrame from pandas DataFramedf=ks.from_pandas(pdf)# Rename the columnsdf.columns=['x','y','z1']# Do some operations in place:df['x2']=df.x*df.x

文档

项目文档在这里发布:https://koalas.readthedocs.io

邮件列表

我们使用google groups进行邮件列表:https://groups.google.com/forum/!论坛/考拉开发

开发指南

参见贡献.md

设计原则

本节概述了考拉项目的设计原则。

是蟒蛇

考拉的目标是python数据科学家。我们希望尽可能遵守用户已经熟悉的约定。下面是一些示例:

  • 函数名和参数使用snake_case,而不是camelcase。这与Pyspark的设计不同。例如,考拉有to_pandas(),而pyspark有topandas()用于将数据帧转换为pandas数据帧。在有限的情况下,为了保持与Spark的兼容性,我们还提供Spark的变体作为别名。

  • 考拉在最大程度上尊重python数值生态系统的约定,并允许使用spark支持的numpy类型等。

  • 考拉文档的风格和基础架构只需遵循pydata项目的其余部分即可。

统一小数据(pandas)api和大数据(spark)api,但pandas优先

考拉数据框架是为了在一个api下提供最好的pandas和spark,必要时在每个api之间进行简单而清晰的转换。当spark和熊猫有相似的api,但有细微的差异时,原则是尊重相反的api。首先是熊猫API的CT。

有不同种类的函数:

  1. 在Spark和Pandas中以相同名称找到的函数(countdtypeshead)。返回值与p and as(而不是spark)中的返回类型相同。

  2. 在spark中找到但在pandas中有明显等价物的函数,例如aliasrename。这些函数将作为pandas函数的别名实现,但应将它们标记为相同函数的别名。提供它们的目的是让pyspark的现有用户无需修改代码就可以获得考拉的好处。

  3. 只在熊猫身上发现的功能。当这些函数适合于分布式数据集时,它们应该在考拉中可用。

  4. 仅在SPARK中发现的对控制计算的分布式性质至关重要的函数,例如cache。考拉应该有这些功能。

我们仍在争论是否应该将spark中提供的数据转换函数添加到考拉中,例如select。我们希望听到您对此的反馈。

返回大数据的考拉数据结构和小数据的熊猫数据结构

开发人员经常面临这样一个问题:一个特定的函数应该返回考拉数据帧/序列,还是熊猫数据帧/序列。原则是:如果返回的对象可以很大,那么使用考拉数据帧/序列。如果数据必须很小,请使用pandas数据帧/序列。例如,dataframe.dtypes返回一个pandas系列,因为dataframe中的列数是有界的且很小,而dataframe.head()series.unique()返回一个考拉数据帧/系列,因为生成的对象可能很大。

为常见的数据科学任务提供可发现的api

面临过度泛化的风险,有两种api设计方法:第一种方法侧重于为常见任务提供api;第二种方法从抽象开始,使用户能够通过组合原语来完成任务。虽然世界不是黑白的,但熊猫采取了更多的前一种方法,而星火采取了更多的后一种方法。

一个例子是值计数(按某个键列计数),这是数据科学中最常见的操作之一。pandasdataframe.value\count按排序的顺序返回结果,在90%的情况下,这是用户在探索数据时喜欢的结果,而spark's不排序,这在构建数据管道时更可取,因为用户可以通过添加显式的排序方式

与熊猫类似,考拉也应该更倾向于前者,为常见的数据科学任务提供可发现的api。在大多数情况下,通过简单地实现pandas的api可以很好地处理这个原则。然而,在某些情况下,pandas的api不能满足特定的需求,例如绘制大数据。

提供有据可查的api,并提供示例

所有功能和参数都应记录在案。大多数函数都应该用示例来记录,因为这些示例比解释函数功能的一大串文本更容易理解。

建议添加文档的方法是从pyspark或pandas中相应函数的docstring开始,并对其进行修改以适应考拉。如果要添加新函数,也可以将其添加到docs/source/reference目录中的api reference doc index页面。docstring中的示例也提高了我们的测试覆盖率。

护栏,防止用户在脚中开枪

大熊猫的某些操作在数据规模上是非常昂贵的,我们不想给用户一种错觉,即他们可以依赖考拉的这种操作。那也就是说,在考拉中实现的方法在默认情况下应该安全地在大型数据集上执行。因此,考拉没有实现以下功能:

  1. 基本上不可并行的功能:例如在每个元素上强制循环
  2. 需要在单个节点的内存中具体化整个工作集的功能。这就是为什么我们不实现pandas.dataframe.values。另一个例子是\u repr\u html调用将显示的记录总数上限设置为最多1000条,以防止用户只需在笔记本中键入数据帧的名称即可炸毁其驱动程序节点。

不过,也有一些例外。"大数据科学"的一个常见模式是,虽然初始数据集很大,但随着分析的深入,工作集会变得更小。例如,数据科学家通常对数据集执行聚合,然后希望将聚合的数据集转换为某些本地数据结构。为了帮助数据科学家,我们提供以下服务:

请注意,从名称中可以清楚地看到,这些函数返回一些本地数据结构,这些结构需要在单个节点的内存中具体化数据。对于这些函数,我们还显式地用一个警告注释来记录它们,即生成的数据结构必须很小。

成为一个精益的api层并快速移动

考拉是设计为一个API覆盖层上的火花。该项目应该是轻量级的,大多数功能应该作为spark或panda的包装器来实现。考拉不接受重量级实现,例如执行引擎更改。

这种方法使我们能够迅速行动。在相当长的将来,我们的目标是每周发布一次。如果我们发现一个严重的错误,我们将在错误修复可用时立即发布一个新版本。

高测试覆盖率

考拉应该受到很好的测试。该项目跟踪其测试覆盖率超过90%的整个代码库,并接近100%的关键部分。除非codecov报告中的语句覆盖率接近100%,否则将不接受拉取请求。

FAQ

项目进展如何?

这个项目目前处于测试阶段,并且正在快速发展。 我们计划在这个阶段每周发布一次。 您应该预料到以下差异:

是考拉还是考拉?

是考拉。与熊猫不同,我们在这里使用大写。

我应该使用pyspark的dataframe api还是koalas?

如果您已经熟悉熊猫,并且希望利用spark获得大数据,我们建议您 使用考拉。如果您从头开始学习Spark,我们建议您从Pyspark的API开始。

如何请求对方法的支持?

文件a github问题:https://github.com/databricks/koalas/issues

欢迎databricks客户提交支持票证以请求新功能。

考拉和达斯克有何不同?

不同的项目有不同的重点。星火已经部署在几乎每一个 组织,通常是存储在数据池中的大量数据的主要接口。 考拉的灵感来源于达斯克,目的是使从熊猫到火花的转变更容易获得数据。 科学家。

我怎样才能为考拉做贡献?

参见贡献.md

为什么要创建一个新项目(而不是将其放入apache spark本身)?

两个原因:

  1. 我们需要一个能够快速迭代并发布新版本的场所。制造一个 作为一个单独的项目发布是微不足道的(按分钟的顺序)。火花释放需要 更长时间(按天数顺序)

  2. 考拉采用了一种不同的方法,这种方法可能与Spark的API设计原则相矛盾,并且 考虑到Spark的庞大用户基础,原则不能轻易改变。一个单独的新项目 为我们提供了一个尝试新设计原则的机会。

我如何在数据块上使用这个?

考拉需要databricks runtime 5.x或更高版本。对于常规databricks运行时,您可以使用集群ui上的libraries选项卡安装考拉,或者在笔记本中使用dbutils:

dbutils.library.installPyPI("koalas")dbutils.library.restartPython()

在未来,我们将在常规的databricks运行时和 用于机器学习的数据块运行时。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java应用程序不是在Eclipse中运行,而是在命令行中运行   swing Java图形组件问题。似乎找不到错误   我需要键盘。close();让代码正常工作?   Springboot中的java HttpSession   抽象语法树我想添加一个语句。我试图解析它,java解析器异常被抛出。如何克服它?   java Hibernate:清理会话   具有不连续子集的java划分问题   java正则表达式查找最后一个冒号后的字符串   java从SpringShell执行OS命令   Java扫描器字符串输入   java字符串索引越界异常(charAt)   java执行器服务终止被卡住   Springockito没有继承java@ContextConfiguration   java如何为一个servlet映射多个url   java安卓获取命令的stderr   java生成类型。表:数据库中的大数字   安卓 Getter Setter返回NothingJava