返回资讯中心
外部精选
软件工程
#开发者实时流

开源 Java 数据处理库 CupOfTea 发布

来源标题:New open source Java Data Library

CupOfTea 是一个轻量级 Java 数据处理库,提供简洁高效的 API 处理大型结构化数据集。它支持从数组、列表和 CSV 等来源创建 DataFrame,并涵盖过滤、聚合、连接等操作,还支持缺失值模型和精确货币运算。

Hacker News 最新cfpv2026/11/6 · 今天29 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

CupOfTea 是一个用于 Java 数据处理的轻量级库。它提供了简单高效的 API 来处理大型结构化数据集,支持过滤、聚合、连接和数据分析等操作。 支持从数组、列表、CSV 文件以及其他来源创建 DataFrame。 一等公民的 Schema 定义:Schema.of("year", INT, "price", DOUBLE)。 在 CSV、JSON 和 Excel 导入时可选自动类型推断。 一等公民的缺失值模型(NA),与空字符串("")区分开来。 完整支持 java.time(LocalDate、LocalDateTime、Instant)。 使用 BigDecimal 进行精确货币运算(Schema.DECIMAL)。 支持列选择、行过滤、分组、聚合和切片操作。 关系连接:innerJoin、leftJoin、rightJoin、outerJoin、crossJoin,支持自动列去重、多键连接和自定义后缀。 统计运算与摘要:高性能线性 $O(n)$ 分位数和中位数(通过 Introselect 实现)、样本与总体方差和标准差、偏度、峰度、协方差、相关矩阵(corr())以及描述性摘要(describe())。 窗口、滚动与累积函数:滑动滚动窗口(df.rolling(w))、扩展窗口(df.expanding())、累积操作(cumsum、cumprod、cummin、cummax)、时间序列平移(lead、lag、diff、pctChange),以及类似 SQL 的分析窗口分区与排名(df.window().partitionBy(...).orderBy(...).rank())。 读写 CSV、JSON、Excel、Parquet 和 YAML 文件。 DTO 与 Record 映射:直接导入和导出标准 Java POJO/JavaBean 和 Java Record(CupOfTea.read().records(...)、df.write().records(...)、CupOfTea.read().dtos(...)、df.write().dtos(...))。 列式引擎:高性能连续内存布局(ColumnVector 使用基本类型 int[]、double[]、long[]、float[]、boolean[]、String[] 以及 BitSet 空值位掩码),消除逐单元装箱对象开销和行哈希查找。 统一的变更模式:默认使用流式 IN_PLACE 构建器,可通过 .asCopyOnWrite() 和 .asInPlace() 选择启用 COPY_ON_WRITE。 深拷贝:CupOfTea 和 IDataFrame 上提供显式的 .copy() 深拷贝方法。 不可变 Row API:强类型、不可修改的 Row 对象,提供类型化访问器(getInt、getString、getDouble、getBoolean、getLocalDate 等),内部可变行映射零泄漏。 环境要求 Java:Java 17 LTS 或更高版本 构建工具:Maven 3.8+ 或 Gradle 7+ 安装 CupOfTea 是模块化的。你可以只导入核心引擎以及项目所需的 IO 格式模块,或者引入 cupoftea-all 以获得完整的格式支持。 <dependency> <groupId>io.github.cupoftea-labs</groupId> <artifactId>cupoftea-core</artifactId> <version>0.24.0</version> </dependency> 按需添加可选的格式模块(CSV、JSON、Excel、Parquet、Arrow、Plot、SQL、HTML、YAML、XML):

<!-- Example: Add CSV and JSON format support --> <dependency> <groupId>io.github.cupoftea-labs</groupId> <artifactId>cupoftea-csv</artifactId> <version>0.24.0</version> </dependency> <dependency> <groupId>io.github.cupoftea-labs</groupId> <artifactId>cupoftea-json</artifactId> <version>0.24.0</version> </dependency> <!-- Or import all formats with the aggregator module: --> <!-- <dependency> <groupId>io.github.cupoftea-labs</groupId> <artifactId>cupoftea-all</artifactId> <version>0.24.0</version> </dependency> --> 有关版本发布和发布的更多详细信息,请参阅 docs/community/releasing.md。 // Core library implementation 'io.github.cupoftea-labs:cupoftea-core:0.24.0' // Optional format modules implementation 'io.github.cupoftea-labs:cupoftea-csv:0.24.0' implementation 'io.github.cupoftea-labs:cupoftea-json:0.24.0' // Or all formats at once: // implementation 'io.github.cupoftea-labs:cupoftea-all:0.24.0' Kotlin DSL(build.gradle.kts): // Core library implementation("io.github.cupoftea-labs:cupoftea-core:0.24.0") // Optional format modules implementation("io.github.cupoftea-labs:cupoftea-csv:0.24.0") implementation("io.github.cupoftea-labs:cupoftea-json:0.24.0") // Or all formats at once: // implementation("io.github.cupoftea-labs:cupoftea-all:0.24.0") 可用模块 模块 描述 依赖 / 格式 cupoftea-core 核心 DataFrame 引擎、过滤、聚合、SPI 接口 无重量级外部依赖 cupoftea-csv CSV 格式读写器 OpenCSV cupoftea-json JSON 格式读写器 Jackson Databind cupoftea-excel Excel 格式读取器(.xlsx / .xls) Apache POI 5.5.1 cupoftea-parquet Parquet 格式读写器 Apache Parquet / Hadoop cupoftea-arrow Apache Arrow IPC 和 Feather 零拷贝格式读写器 Apache Arrow Vector & Netty cupoftea-sql 通过 JDBC 实现 SQL 数据库读写,支持批处理和事务 JDBC(java.sql、javax.sql) cupoftea-html HTML 表格读取器 Jsoup cupoftea-yaml YAML 格式读写器 SnakeYAML cupoftea-xml XML 格式读取器 标准 Java XML DOM cupoftea-plot 声明式绘图引擎(Vega-Lite)、HTML 导出、桌面预览 Jackson Databind cupoftea-all 聚合所有格式和绘图模块的元模块 上述所有格式及绘图 使用示例 读写数据(流式 API) IO 格式通过 ServiceLoader 动态发现。确保对应的格式模块位于你的 classpath 中: import com.cupoftea.CupOfTea; import com.cupoftea.table.Row; import com.cupoftea.table.Schema; import static com.cupoftea.table.Schema.*; import java.io.File; public class Main { public static void main(String[] args) { // Read CSV using fluent API CupOfTea df = CupOfTea.read().csv("data.csv"); df.print(); // Perform filtering with immutable Row CupOfTea filtered = df.filter(row -> row.getInt("age") != null && row.getInt("age") > 30); filtered.print(); // Core pandas-like ops: // Selection and dropping of columns (use copy() for independent views) CupOfTea selected = df.copy().select("name", "age", "salary"); CupOfTea withoutDept = df.copy().drop("department"); // Inspection: head, tail, and slicing df.head(5).print();

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →