13 个版本
0.3.2 | 2024 年 5 月 25 日 |
---|---|
0.3.0 | 2024 年 3 月 4 日 |
0.2.1 | 2023 年 10 月 12 日 |
0.2.0 | 2023 年 8 月 14 日 |
0.1.5 | 2023 年 5 月 29 日 |
#661 在 解析器实现
每月 896 次下载
285KB
3K SLoC
dply 是一个命令行工具,用于查看、查询和写入 csv 和 parquet 文件,受 dplyr 启发。
使用概述
一个 dply 流程包含多个函数,用于读取、转换或写入 Parquet 或 CSV 文件。
CSV、NdJSON 和 Parquet 文件之间的转换
函数 csv
、json
和 parquet
分别用于读取和写入各自格式的数据。以下两个步骤的流程将 Parquet 文件转换为 NdJSON
$ dply -c 'parquet("nyctaxi.parquet") | json("nyctaxi.json")'
如果我们想转换列的子集,可以使用 select
步骤
$ dply -c 'parquet("nyctaxi.parquet") |
select(ends_with("time"), payment_type) |
json("nyctaxi.json")'
$ head -2 nyctaxi.json| jq
{
"payment_type": "Credit card",
"tpep_dropoff_datetime": "2022-11-22T19:45:53",
"tpep_pickup_datetime": "2022-11-22T19:27:01"
}
{
"payment_type": "Cash",
"tpep_dropoff_datetime": "2022-11-27T16:50:06",
"tpep_pickup_datetime": "2022-11-27T16:43:26"
}
从嵌套的 NdJSON 中提取嵌套字段
为了从 NdJSON 文件中提取嵌套字段,我们可以在 mutate
步骤中使用 field
函数。以下示例从 payload
对象中的 commits
列表提取 sha
$ dply -c 'json("./tests/data/github.json") |
mutate(commits = field(payload, commits)) |
unnest(commits) |
mutate(sha = field(commits, sha)) |
select(sha) |
show()'
shape: (4, 1)
┌──────────────────────────────────────────┐
│ sha │
│ --- │
│ str │
╞══════════════════════════════════════════╡
│ a02be18dc2a0faa0faec14f50c8b190ca0b50034 │
│ ac97a4ab3a4d86f61a6ba167c06cd8813b470867 │
│ null │
│ e4b233f1323a4b4e4461ed1aad31d20a7fbf0db4 │
└──────────────────────────────────────────┘
复杂的 NdJSON 文件可以转换为 Parquet 以加快查询处理速度
$ dply -c 'json("github.json") | parquet("github.parquet")'
分组、排序列并将结果保存到文件中
以下流程读取 Parquet 文件[^1],按 payment_type
分组行,计算每种支付类型的最低、平均值和最高票价,将结果保存到 fares.csv
CSV 文件中,并显示结果
$ dply -c 'parquet("nyctaxi.parquet") |
group_by(payment_type) |
summarize(
min_price = min(total_amount),
mean_price = mean(total_amount),
max_price = max(total_amount)
) |
arrange(payment_type) |
csv("fares.csv") |
show()'
shape: (5, 4)
┌──────────────┬───────────┬────────────┬───────────┐
│ payment_type ┆ min_price ┆ mean_price ┆ max_price │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ f64 ┆ f64 ┆ f64 │
╞══════════════╪═══════════╪════════════╪═══════════╡
│ Cash ┆ -61.85 ┆ 18.07 ┆ 86.55 │
│ Credit card ┆ 4.56 ┆ 22.969491 ┆ 324.72 │
│ Dispute ┆ -55.6 ┆ -0.145161 ┆ 54.05 │
│ No charge ┆ -16.3 ┆ 0.086667 ┆ 19.8 │
│ Unknown ┆ 9.96 ┆ 28.893333 ┆ 85.02 │
└──────────────┴───────────┴────────────┴───────────┘
在没有参数的情况下运行 dply 将启动交互式客户端

[^1]: 在 tests/data 文件夹中的 nyctaxi.parquet
文件是从 NYC 出租车行程记录数据 中抽取的 250 行 Parquet 文件。
支持的功能
dply
支持以下功能
- arrange 按列值排序行
- count 计算列的唯一值
- config 配置显示格式选项
- csv 读取或写入 CSV 格式的数据框
- distinct 保留唯一的行
- filter 过滤满足给定谓词的行
- glimpse 显示数据框概览
- 按组汇总 执行分组聚合
- head 以表格格式显示数据框的前几行
- 连接 左连接、内连接、外连接和交叉连接
- json 以 JSON 格式读取或写入数据框
- mutate 创建或修改列
- parquet 以 Parquet 格式读取或写入数据框
- relocate 移动列的位置
- rename 重命名列
- select 选择列
- show 显示所有数据框行
- unnest 将列表列展开为行
更多示例可以在 测试文件夹 中找到。
安装
由 GitHub 发布动作生成的 Linux、macOS (x86) 和 Windows 的二进制文件可在 发布页面 获取。
您还可以使用 Cargo 安装 dply
cargo install dply
或从该存储库构建它
git clone https://github.com/vincev/dply-rs
cd dply-rs
cargo install --path .
依赖项
~47–83MB
~1.5M SLoC