打开或粘贴 CSV 文件,然后点击 下载 Parquet。默认情况下每一列都是可为空的 UTF-8 STRING,所以 000917 这样的 ID 会保留前导零,空单元格会变成 null。选择 识别数字和 true/false 后,所有值都符合的列会写为 INT64、DOUBLE 和 BOOLEAN。文件由一个 JavaScript Parquet 写入器在你的浏览器中生成,不会上传任何内容。
如何把 CSV 转换为 Parquet
- 打开
.csv、.tsv或.txt文件,拖到工具上,或粘贴数据。在 输入 下检查表格;如有需要,可在 导入设置 中设置分隔符、表头行或编码(GBK 文件选 GB18030)。 - 选择 值类型、压缩方式、是否 空文本写为 null,以及 每个行组的行数。
- 点击 下载 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。
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"
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;不压缩只用于调试。