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

将HDFS中的Parquet文件转换为CSV并复制到本地的方法咨询

我来帮你搞定把HDFS上的Parquet文件转成CSV并下载到本地的问题~

首先得说清楚:你之前用的hadoop fs -text和copyToLocal命令为什么行不通——Parquet是二进制列式存储格式,不是纯文本文件:

  • hadoop fs -text只能解析SequenceFile、TextFile这类文本相关的格式,直接读Parquet会输出乱码或者不可识别的二进制内容;
  • copyToLocal只是把HDFS上的原Parquet文件下载到本地,你得到的media1.csv其实还是Parquet格式,只是改了后缀名而已,自然没法用CSV阅读器打开。

下面给你两种最常用的靠谱方案,按需选择:

方案1:用Spark转换(推荐,高效灵活)

Spark对Parquet的支持非常完善,不管是交互式操作还是批量任务都很方便。

方式一:交互式spark-shell操作

  1. 先启动spark-shell:
spark-shell
  1. 在Spark Shell里执行Scala代码完成转换:
// 读取HDFS上的Parquet文件
val parquetDF = spark.read.parquet("/user/Current_Data/partitioned_key=MEDIA/000000_0")
// 把数据写入本地的CSV目录(加header参数会把列名作为CSV表头,不需要可以去掉)
parquetDF.write.option("header", "true").csv("/home/oozie-coordinator-workflows/quality_report/media_csv_temp")
  1. Spark会生成多个part-*开头的CSV文件,用cat合并成单个文件:
cat /home/oozie-coordinator-workflows/quality_report/media_csv_temp/part-* > /home/oozie-coordinator-workflows/quality_report/media.csv

方式二:用spark-submit运行Python脚本(适合定时/批量任务)

写一个简单的Python脚本(比如parquet_to_csv.py):

from pyspark.sql import SparkSession

if __name__ == "__main__":
    # 初始化Spark会话
    spark = SparkSession.builder.appName("Parquet2CSV").getOrCreate()
    # 读取HDFS上的Parquet文件
    df = spark.read.parquet("hdfs:///user/Current_Data/partitioned_key=MEDIA/000000_0")
    # 写入CSV到本地,mode("overwrite")会覆盖已存在的目录
    df.write.option("header", "true").mode("overwrite").csv("/home/oozie-coordinator-workflows/quality_report/media_csv_temp")
    # 关闭Spark会话
    spark.stop()

然后提交运行:

spark-submit --master local[*] parquet_to_csv.py

之后同样用cat命令合并分区文件即可。

方案2:用Hive转换(适合已有Hive环境的场景)

如果你的集群已经部署了Hive,也可以通过Hive表来完成格式转换:

  1. 启动Hive CLI:
hive
  1. 创建一个临时外部表,指向HDFS上的Parquet文件路径:
CREATE EXTERNAL TABLE temp_parquet_table
STORED AS PARQUET
LOCATION '/user/Current_Data/partitioned_key=MEDIA/000000_0';
  1. 把表数据导出到本地的CSV目录:
INSERT OVERWRITE LOCAL DIRECTORY '/home/oozie-coordinator-workflows/quality_report/media_csv_temp'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE
SELECT * FROM temp_parquet_table;
  1. 合并生成的文件到最终CSV:
cat /home/oozie-coordinator-workflows/quality_report/media_csv_temp/* > /home/oozie-coordinator-workflows/quality_report/media.csv
  1. 最后可以删除临时表清理环境:
DROP TABLE temp_parquet_table;

总结一下:处理Parquet这种结构化二进制格式,必须用支持它的工具(Spark/Hive)来解析并转换格式,直接用HDFS的基础命令是行不通的~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:38:26