如何在终端中提取Parquet文件的指定N行数据
一、终端提取Parquet文件的N行并输出为Parquet格式
parquet-tools的cat命令会把Parquet转成文本输出,管道给head只能得到文本片段,没法保留Parquet格式。推荐用DuckDB(轻量型列式数据库,终端友好)来实现,它能直接读取Parquet并输出指定行数的Parquet文件:
本地安装DuckDB的情况
# 提取前10行到output.parquet,替换10为你需要的行数 duckdb -c "COPY (SELECT * FROM 'input.parquet' LIMIT 10) TO 'output.parquet' (FORMAT PARQUET);"
用Docker运行DuckDB的情况
如果不想本地安装,直接用Docker挂载当前目录执行:
# 替换10为目标行数,input.parquet是源文件,output.parquet是输出文件 docker run --rm -v $(pwd):/data duckdb/duckdb -c "COPY (SELECT * FROM '/data/input.parquet' LIMIT 10) TO '/data/output.parquet' (FORMAT PARQUET);"
备选方案:用Spark命令行(需Spark环境)
如果你已经有Spark环境,也可以用一行命令完成:
spark-shell -e "spark.read.parquet('input.parquet').limit(10).write.parquet('output.parquet')"
二、生成测试用Parquet文件
同样用DuckDB就能快速生成,无需写脚本:
直接生成带测试数据的Parquet
duckdb -c " CREATE TABLE test (id INT, name VARCHAR, value DOUBLE); INSERT INTO test VALUES (1, 'a', 1.1), (2, 'b', 2.2), (3, 'c', 3.3), (4, 'd', 4.4); COPY test TO 'test.parquet' (FORMAT PARQUET); "
Docker版本生成测试文件
docker run --rm -v $(pwd):/data duckdb/duckdb -c " CREATE TABLE test (id INT, name VARCHAR, value DOUBLE); INSERT INTO test VALUES (1, 'a', 1.1), (2, 'b', 2.2), (3, 'c', 3.3), (4, 'd', 4.4); COPY test TO '/data/test.parquet' (FORMAT PARQUET); "
从CSV转Parquet(可选)
如果已有CSV测试数据,也可以转成Parquet:
- 先创建
test.csv文件:
id,name,value 1,a,1.1 2,b,2.2 3,c,3.3 4,d,4.4
- 用DuckDB转换:
duckdb -c "COPY (SELECT * FROM 'test.csv') TO 'test.parquet' (FORMAT PARQUET);"
内容的提问来源于stack exchange,提问作者Areza
相关产品推荐
相关产品推荐

