You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Rust版Polars像DataFusion或Spark那样读取JSON文件?

使用Polars读取每行一个JSON对象的文件

待读取的JSON文件为**换行分隔JSON(NDJSON)**格式,每行一个独立JSON对象:

{<json object>},
{<json object>}

以下是对应你提供的DataFusion实现的Polars(Rust)代码,实现读取文件并选择指定列的功能:

use polars::prelude::*;
use std::time::Instant;
use env_logger;

fn main() -> Result<()> {
    env_logger::init();
    let start = Instant::now();
    let file_path = "datalayers/landing/Toys_and_Games_5.json";
    // let file_path = "datalayers/landing/test_file.json";
    let df = read_data(file_path)?;
    let duration = start.elapsed();
    log::info!("Pipeline executed successfully!");
    log::info!("Pipeline Execution time: {:?}", duration);
    Ok(())
}

fn read_data(path: &str) -> Result<DataFrame> {
    let selected_columns = vec![
        "asin",
        "vote",
        "verified",
        "unixReviewTime",
        "reviewTime",
        "reviewText",
    ];
    // 读取换行分隔格式的JSON文件
    let df = JsonReader::from_path(path)
        .with_json_format(JsonFormat::LineDelimited)
        .finish()?;
    
    // 筛选目标列
    let df = df.select(selected_columns)?;
    log::info!("Data loading plan created successfully!");
    Ok(df)
}

关键说明

  • Polars通过JsonReader::with_json_format(JsonFormat::LineDelimited)明确指定读取NDJSON格式,和DataFusion的NdJsonReadOptions作用完全一致。
  • 若文件是.gz压缩格式,Polars支持直接读取,无需手动解压,直接传入压缩文件路径即可。

示例文件下载命令

wget -P datalayers/landing http://deepyeti.ucsd.edu/jianmo/amazon/categoryFilesSmall/Toys_and_Games_5.json.gz

内容的提问来源于stack exchange,提问作者DataPsycho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 05:01:06