跳到工具
ViewCSV
无需上传文件

CSV 转 Parquet

orders.csv· 示例数据15 行 · 8 列
值类型
文本列写为 UTF-8 STRING。开启识别后,所有值都符合的列会写为 INT64、DOUBLE 或 BOOLEAN。
orders.csv
#order_idcustomercityproductquantityunit_priceorder_datestatus
1001041磊 黄北京Coffee beans 1kg7139.122026-01-27pending
2001042杰 徐北京Coffee beans 1kg2132.102026-02-14shipped
3001043伟 孙上海Notebook A57129.752026-03-22pending
4001044敏 杨上海Chair, ergonomic1122.252026-04-25paid
5001045静 王成都Coffee beans 1kg9·2026-05-15refunded
6001046伟 黄北京Desk lamp8104.232026-06-06refunded
7001047 伟 吴 成都USB-C cable5225.652026-07-08refunded
8001048杰 李南京Coffee beans 1kg774.982026-08-11refunded
9001049磊 王南京Monitor 27"9223.842026-09-22pending
10001050艳 吴南京Desk lamp391.942026-01-02shipped
11001051娜 刘深圳Monitor 27"2216.982026-02-18pending
12001052磊 刘上海Chair, ergonomic8136.302026-03-22pending
13001053静 张北京Desk lamp4238.822026-04-25pending
14001054艳 陈南京USB-C cable495.922026-05-21paid
15001043伟 孙上海Notebook A57129.752026-03-22pending

15 行 · 1 个文件 在浏览器中用 JavaScript Parquet 写入器生成,不会上传任何内容。

打开或粘贴 CSV 文件,然后点击 下载 Parquet。默认情况下每一列都是可为空的 UTF-8 STRING,所以 000917 这样的 ID 会保留前导零,空单元格会变成 null。选择 识别数字和 true/false 后,所有值都符合的列会写为 INT64、DOUBLE 和 BOOLEAN。文件由一个 JavaScript Parquet 写入器在你的浏览器中生成,不会上传任何内容。

如何把 CSV 转换为 Parquet

  1. 打开 .csv、.tsv 或 .txt 文件,拖到工具上,或粘贴数据。在 输入 下检查表格;如有需要,可在 导入设置 中设置分隔符、表头行或编码(GBK 文件选 GB18030)。
  2. 选择 值类型、压缩方式、是否 空文本写为 null,以及 每个行组的行数。
  3. 点击 下载 Parquet 保存文件,然后用 DuckDB、pandas、Polars、Spark 或其他任何能读取这种格式的工具打开得到的 .parquet 文件。

要用相同设置转换多个文件,请选择 批量转换多个文件。每个文件生成各自的 Parquet 文件,并打包成一个 ZIP 一起下载。批量转换时,每个文件不能超过 25 MB。

Schema 与列类型

列名完全按表头行中的写法使用。空白表头会变成 Column 3,重复表头变成 name (2),确保每个 Parquet 列的名称都不重复。所有列都是可选的(可为空)。

所有值都保留为文本默认选项。每一列都是标注为 UTF-8 字符串的 BYTE_ARRAY,逐字节保存每个值,包括前导零、1,5、N/A 和各种日期格式。
整数(开启识别时)当所有非空值都是不带前导零、介于 −9,007,199,254,740,991 到 9,007,199,254,740,991 之间的整数时,写为 INT64。更大的整数会让该列保持为文本。
小数(开启识别时)当所有值都是有效数字不超过 15 位、能无损转换的普通小数时,写为 DOUBLE。同时包含 12 和 2.5 的列会变成 DOUBLE。
true / false(开启识别时)当所有值都是 true 或 false(大小写不限)时,写为 BOOLEAN。
日期和时间戳两种模式下都保持为 STRING,例如 2026-03-01T08:00:00Z。请在查询引擎中转换类型,例如在 DuckDB 中使用 CAST(reading_at AS TIMESTAMP)。

在带类型的列中,空单元格始终为 null。在字符串列中,空文本写为 null(默认开启)决定空单元格写成 null 还是空字符串 ""。

压缩方式与行组

Snappy(速度快,常用默认值)默认的压缩算法。所有常见的 Parquet 读取工具都支持它。
Gzip(体积更小)生成的文件通常比 Snappy 更小。有些轻量级读取工具不支持 gzip。
不压缩不进行压缩,用于调试,或供没有解压功能的工具使用。
每个行组的行数默认 100,000,可设为 1,000 到 1,000,000 之间。由于浏览器工作区最多容纳 10 万行,默认值只会写出一个行组;设置更小的值可以得到多个行组,读取工具可以跳过或并行读取它们。

文件的元数据中还会记录写入器名称(hyparquet)和一个 created_by_app 键。

CSV 转 Parquet 的常见问题

  • 数值列变成了 STRING。 要么选择了 所有值都保留为文本,要么有某个值不是普通数字,例如 1,234、12 kg、007 或 16 位的小数。可以用 列概况 或 CSV 在线查看 找到它。
  • ID 在其他工具中丢失了前导零。 这个转换器绝不会把带前导零的列变成数字。如果 ID 被改了,很可能是 CSV 在转换前被电子表格软件打开并保存过;请在 CSV 在线查看 中检查源文件。
  • 所有内容都挤在一列里。 分隔符识别错了;请在 导入设置 中选择正确的分隔符。
  • 文件超出了这个工具的处理范围。 Parquet 转换适用于 25 MB、10 万行、250 列和 200 万个单元格以内的文件。请先 拆分 CSV 文件 再分别转换;如果只是需要更小的下载文件,也可以用 gzip 压缩 CSV。

限制与隐私

CSV 文件必须能在浏览器工作区中打开:最大 25 MB、10 万行、250 列和 200 万个单元格。Parquet 文件在内存中一次构建完成。

写入器是纯 JavaScript 库 hyparquet-writer,只在转换时加载;不涉及 WebAssembly,也不经过服务器。它在当前标签页的后台线程中运行,所以页面保持流畅,点击 取消 即可停止。CSV 文件不会发送到任何服务器。如果需要可查询的数据库文件,请使用 CSV 转 SQLite。

示例:用 PyArrow 读回传感器读数

一组传感器读数,包含带前导零的 ID、ISO 时间戳、空单元格和引号内的逗号,用 识别数字和 true/false 和默认的 Snappy 压缩转换,再用 PyArrow 读回。temp_c 变成了 DOUBLE,ok 变成了 BOOLEAN;sensor_id 和 reading_at 仍是字符串。如果使用默认的 所有值都保留为文本,五列都是 string,ok 按原样保留 TRUE。

CSV
sensor_id,reading_at,temp_c,ok,site
000917,2026-03-01T08:00:00Z,21.5,true,Lab 2
000918,2026-03-01T08:05:00Z,,false,
000919,2026-03-01T08:10:00Z,-3,TRUE,"Roof, north"
Parquet(用 PyArrow 读取)
schema:
  sensor_id: string
  reading_at: string
  temp_c: double
  ok: bool
  site: string
rows: 3, row groups: 1, compression: SNAPPY

{'sensor_id': '000917', 'reading_at': '2026-03-01T08:00:00Z', 'temp_c': 21.5, 'ok': True, 'site': 'Lab 2'}
{'sensor_id': '000918', 'reading_at': '2026-03-01T08:05:00Z', 'temp_c': None, 'ok': False, 'site': None}
{'sensor_id': '000919', 'reading_at': '2026-03-01T08:10:00Z', 'temp_c': -3.0, 'ok': True, 'site': 'Roof, north'}

常见问题

转换时需要上传我的 CSV 吗?

不需要。Parquet 文件由浏览器标签页中后台线程里的 JavaScript 库写出,下载文件也在本地生成。

为什么日期不写成 Parquet 的 DATE 或 TIMESTAMP?

CSV 中的日期有各种格式和时区,悄悄猜测可能会让值发生偏移。所以日期按文件中的写法以字符串写出;请在 DuckDB、Spark 或 pandas 中转换类型,在那里由你决定格式和时区。

应该选择哪种压缩方式?

Snappy 几乎适用于所有 Parquet 读取工具。如果更在意文件大小,并且读取工具支持 gzip,就选 Gzip;不压缩只用于调试。

标准与参考资料