Polars:从 Apache Spark 过渡指南

Polars:从 Apache Spark 过渡指南

如果您已经熟悉 Apache Spark,那么在使用 Polars 时需要注意一些关键区别。以下是一些典型的 Spark 操作及其对应的 Polars 实现。

1. 基于列的方法 vs. 基于行的方法

Spark DataFrame 类似于一个行的集合,而 Polars DataFrame 更接近于一个列的集合。这意味着你可以在 Polars 中以 Spark 中不可能的方式组合列。

案例 1: 合并 head 与 sum

在 Polars 中,你可以写出以下语句:

python 复制代码
df.select([
    pl.col("foo").sort().head(2),
    pl.col("bar").filter(pl.col("foo") == "d").sum()
])

该代码段输出:

shape: (2, 2)
┌─────┬─────┐
│ foo ┆ bar │
│ --- ┆ --- │
│ str ┆ i64 │
╞═════╪═════╡
│ a   ┆ 9   │
├╌╌╌╌╌┼╌╌╌╌╌┤
│ b   ┆ 9   │
└─────┴─────┘

foobar 上的表达式是完全独立的。由于 bar 上的表达式返回一个单一的值,这个值在 foo 表达式输出的每个值中都会重复,但是 ab 与产生 9 没有关系。

要在 Spark 中做类似的事情,你需要单独计算总和,并将其作为字面值返回。

案例 2: 合并两个 head

在 Polars 中,你可以在同一个 DataFrame 上结合两个不同的 head 表达式,只要它们返回相同数量的值。

python 复制代码
df.select([
    pl.col("foo").sort().head(2),
    pl.col("bar").sort(reverse=True).head(2),
])

该代码段输出:

shape: (3, 2)
┌─────┬─────┐
│ foo ┆ bar │
│ --- ┆ --- │
│ str ┆ i64 │
╞═════╪═════╡
│ a   ┆ 5   │
├╌╌╌╌╌┼╌╌╌╌╌┤
│ b   ┆ 4   │
└─────┴─────┘

同样,这里的两个 head 表达式是完全独立的,a5b4 的配对纯粹是表达式输出的两列并列的结果。

为了在 Spark 中完成类似的工作,你需要生成一个人工的 key 使你能够以相同的方式连接这些值。

以上代码示例展示了如何将 Spark 中的常见操作转换为 Polars。更多详细信息和高级用法,请访问原网页

相关推荐
深蓝海拓6 分钟前
Pyside6(PyQT5)中的QTableView与QSqlQueryModel、QSqlTableModel的联合使用
数据库·python·qt·pyqt
无须logic ᭄14 分钟前
CrypTen项目实践
python·机器学习·密码学·同态加密
蘑菇丁25 分钟前
ansible 批量按用户名创建kerberos主体,并分发到远程主机
大数据·服务器·ansible
Channing Lewis27 分钟前
flask常见问答题
后端·python·flask
Channing Lewis28 分钟前
如何保护 Flask API 的安全性?
后端·python·flask
幻想编织者29 分钟前
Ubuntu实时核编译安装与NVIDIA驱动安装教程(ubuntu 22.04,20.04)
linux·服务器·ubuntu·nvidia
水兵没月1 小时前
钉钉群机器人设置——python版本
python·机器人·钉钉
C嘎嘎嵌入式开发1 小时前
什么是僵尸进程
服务器·数据库·c++
我想学LINUX2 小时前
【2024年华为OD机试】 (A卷,100分)- 微服务的集成测试(JavaScript&Java & Python&C/C++)
java·c语言·javascript·python·华为od·微服务·集成测试
Yeats_Liao3 小时前
Navicat 导出表结构后运行查询失败ERROR 1064 (42000): You have an error in your SQL syntax;
数据库·sql