写点什么

Koalas:让 pandas 轻松切换 Apache Spark,在大数据中规模应用

  • 2019 年 4 月 25 日
  • 本文字数:2454 字

    阅读完需:约 8 分钟

Koalas:让pandas轻松切换Apache Spark,在大数据中规模应用

4 月 24 日,Databricks 在 Spark + AI 峰会上开源了一个新产品 Koalas,它增强了 PySpark 的 DataFrame API,使其与 pandas 兼容。


Python 数据科学在过去几年中爆炸式增长, pandas 已成为生态系统的关键。当数据科学家得到一个数据集时,他们会使用 pandas 进行探索。它是数据处理和分析的终极工具。事实上,pandas 的 read_csv 通常是学生在学习数据科学过程中使用的第一个命令。


问题是什么呢?pandas 不能很好地在大数据中规模应用,因为它专为单个机器可以处理的小型数据集而设计。另一方面,Apache Spark 已成为处理大数据实际上的标准。今天,许多数据科学家将 pandas 用于职业培训、偏好性项目和小型数据任务,但是当他们使用非常大的数据集时,他们必须迁移到 PySpark 以利用 Spark,或对其数据进行下采样以使用 pandas。


现在有了 Koalas,数据科学家可以从单个机器迁移到分布式环境,而无需学习新的框架。正如你在下面所看到的,只需替换一个包,就可以使用 Koalas 在 Spark 上扩展你的 pandas 代码。


pandas:


import pandas as pddf = pd.DataFrame({'x': [1, 2], 'y': [3, 4], 'z': [5, 6]})# Rename columnsdf.columns = [‘x’, ‘y’, ‘z1’]# Do some operations in placedf[‘x2’] = df.x * df.x
复制代码


Koalas:


import databricks.koalas as ksdf = ks.DataFrame({'x': [1, 2], 'y': [3, 4], 'z': [5, 6]})# Rename columnsdf.columns = [‘x’, ‘y’, ‘z1’]# Do some operations in placedf[‘x2’] = df.x * df.x
复制代码


pandas 作为 Python 数据科学的标准词汇

随着 Python 成为数据科学的主要语言,社区已经开发了基于最重要的库的词汇表,包括 pandas、matplotlib 和 numpy。当数据科学家能够使用这些库时,他们可以充分表达他们的想法,并根据想法得出结论。他们可以将某些东西概念化并立即执行。


但是当他们不得不在词汇表之外使用库时,他们会遇到麻烦,每隔几分钟就需要检查一次 StackOverflow,还必须中断他们的工作流程才能使代码正常工作。虽然 PySpark 易于使用,并且在很多方面类似于 pandas,但它仍然是一个数据科学家必须学习的不同词汇。


在 Databricks,我们相信 Spark 上的 pandas 将大大提高数据科学家和数据驱动型组织的生产力,原因如下:


  • Koalas 无需决定是否为给定的数据集使用 pandas 或 PySpark

  • 对于最初用 pandas 为单个机器编写的工作,Koalas 允许数据科学家通过 pandas 和 Koalas 的轻松切换来扩展在 Spark 上的代码

  • Koalas 为组织中的更多数据科学家解锁大数据,因为他们不再需要学习 PySpark 以使用 Spark


下面,我们展示了两个简单而强大的 pandas 方法示例,这些方法可以直接在 Spark 上运行 Koalas。


具有分类变量的特征工程

数据科学家在构建 ML 模型时经常会遇到分类变量。一种流行的技术是将分类变量编码为虚拟变量。在下面的示例中,有几个分类变量,包括调用类型、邻域和单元类型。pandas 的 get_dummies 是一种简便的方法。下面我们将展示如何使用 pandas:


import pandas as pddata = pd.read_csv("fire_department_calls_sf_clean.csv", header=0)display(pd.get_dummies(data))
复制代码




有了 Koalas,我们可以通过一些调整在 Spark 上做到这一点:


import databricks.koalas as ksdata = ks.read_csv("fire_department_calls_sf_clean.csv", header=0)display(ks.get_dummies(data))
复制代码


就是这样!


带时间戳的算术

数据科学家一直使用时间戳,但正确处理这些时间戳非常麻烦。pandas 提供了一个优雅的解决方案。假设你有一个日期的 DataFrame :


import pandas as pdimport numpy as npdate1 = pd.Series(pd.date_range('2012-1-1 12:00:00', periods=7, freq='M'))date2 = pd.Series(pd.date_range('2013-3-11 21:45:00', periods=7, freq='W'))df = pd.DataFrame(dict(Start_date = date1, End_date = date2))print(df)
End_date Start_date0 2013-03-17 21:45:00 2012-01-31 12:00:001 2013-03-24 21:45:00 2012-02-29 12:00:002 2013-03-31 21:45:00 2012-03-31 12:00:003 2013-04-07 21:45:00 2012-04-30 12:00:004 2013-04-14 21:45:00 2012-05-31 12:00:005 2013-04-21 21:45:00 2012-06-30 12:00:006 2013-04-28 21:45:00 2012-07-31 12:00:00
复制代码


要使用 pandas 从结束日期中减去开始日期,只需运行:


df['diff_seconds'] = df['End_date'] - df['Start_date']df['diff_seconds'] = df['diff_seconds']/np.timedelta64(1,'s')print(df)End_date Start_date diff_seconds0 2013-03-17 21:45:00 2012-01-31 12:00:00 35545500.01 2013-03-24 21:45:00 2012-02-29 12:00:00 33644700.02 2013-03-31 21:45:00 2012-03-31 12:00:00 31571100.03 2013-04-07 21:45:00 2012-04-30 12:00:00 29583900.04 2013-04-14 21:45:00 2012-05-31 12:00:00 27510300.05 2013-04-21 21:45:00 2012-06-30 12:00:00 25523100.06 2013-04-28 21:45:00 2012-07-31 12:00:00 23449500.0
复制代码


现在要在 Spark 上做同样的事情,你需要做的就是用 Koalas 替换 pandas:


import databricks.koalas as ksdf = ks.from_pandas(pandas_df)df['diff_seconds'] = df['End_date'] - df['Start_date']df['diff_seconds'] = df['diff_seconds'] / np.timedelta64(1,'s')print(df)
复制代码


再做一次,就这么简单。


接下来的计划和 Koalas 入门

我们之所以创建 Koalas,是因为我们遇到了许多不愿意处理大数据的数据科学家。我们相信 Koalas 会让数据科学家将工作轻松拓展到 Spark 上,从而让他们获得更多能力。


目前为止,我们已经实现了常见的 DataFrame 操作方法,以及 pandas 中强大的索引技术。以下是我们路线图中的一些即将推出的项目,主要侧重于扩大覆盖范围:


  • 用于处理文本数据的字符串操作

  • 时间序列数据的日期/时间操作


该计划尚处于初期阶段,但正在迅速发展。如果你有兴趣了解更多有关 Koalas 或入门的信息,请查看该项目的 GitHub:https://github.com/databricks/koalas


原文链接:


https://databricks.com/blog/2019/04/24/koalas-easy-transition-from-pandas-to-apache-spark.html



2019 年 4 月 25 日 11:008973
用户头像

发布了 98 篇内容, 共 57.9 次阅读, 收获喜欢 284 次。

关注

评论

发布
暂无评论
发现更多内容

SSM框架示例(适合新手)

Java 程序员 后端

基于Fiber的React Diff算法源码分析

贝壳大前端技术团队

Fiber React Diff

Tomcat 多端口,多虚拟主机配置方法

Java 程序员 后端

两强联手,百度智能云和中电互联打造自主可控工业互联网联合实验室

百度大脑

人工智能 百度

volatile关键字的原理和要避免的误区

Java 程序员 后端

Spring注解缓存设计原理及实战

Java 程序员 后端

Spring(四):bean标签解析

Java 程序员 后端

Spring系列之数据源的配置 数据库 数据源 连接池的区别

Java 程序员 后端

TCP面试相关总结

Java 程序员 后端

TLS加密远程连接Docker

Java 程序员 后端

SSM框架示例(适合新手)(1)

Java 程序员 后端

SQL的单表查询

Java 程序员 后端

SymmetricDS 数据库双向同步开源软件入门

Java 程序员 后端

Tomcat性能调优

Java 程序员 后端

SQL Server 高性能写入的一些总结

Java 程序员 后端

SQL Server 2008中的分区表(二):如何添加、查询(1)

Java 程序员 后端

System

Java 程序员 后端

T-SQL——数据透视和逆透视

Java 程序员 后端

tomcat的maxThreads、acceptCount,对高并发的影响

Java 程序员 后端

Volatile:内存屏障原理应该没有比这篇文章讲的更清楚了

Java 程序员 后端

spring的事务隔离级别

Java 程序员 后端

使用JDBC操作SAP云平台上的HANA数据库

Jerry Wang

JDBC Cloud SAP 11月日更

SQL Server 2008中的分区表(二):如何添加、查询

Java 程序员 后端

Swagger 3

Java 程序员 后端

this与super关键字(阿里巴巴面试竟然问道这个了……今天把它盘透彻了!

Java 程序员 后端

Android技术分享| 【自习室】自定义View代替通知动画(2)

anyRTC开发者

android 音视频 WebRTC 移动开发 自定义view

Ubuntu16安装Nvidia驱动(GTX1060显卡)

Java 程序员 后端

Vim,人类史上最好用的文本编辑器!从此以后你就是一个善良的极客!

Java 程序员 后端

告别AI模型黑盒子:可解释的神经网络研究

索信达控股

机器学习 模型 可解释模型 可解释机器学习

Vue学习之基础入门

Java 程序员 后端

官宣!Apache ShardingSphere 5.0.0 正式发布

SphereEx

Java 数据库 Apache ShardingSphere

Koalas:让pandas轻松切换Apache Spark,在大数据中规模应用-InfoQ