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

如何使用PySpark读取HDFS中的Parquet文件及指定格式的Hive外部表文件

嘿,这两个PySpark读取Parquet的问题我经常碰到,给你详细拆解下:

Q1: 如何使用PySpark读取HDFS上存储的Parquet文件?

PySpark提供了非常直接的API来搞定这个需求,步骤很清晰:

  1. 初始化SparkSession:这是PySpark程序的入口,确保你的Spark环境已经配置好HDFS相关参数(比如namenode地址)
from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("Read HDFS Parquet") \
    .getOrCreate()
  1. 用read.parquet()读取文件:直接传入HDFS路径即可,路径格式为hdfs://<namenode-host>:<port>/path/to/parquet,如果Spark已经默认绑定HDFS集群,甚至可以省略hdfs://前缀直接写绝对路径
# 读取单个Parquet文件或整个目录下的Parquet文件
df = spark.read.parquet("hdfs://namenode:9000/user/data/sample_data.parquet")

# 如果分区文件的Schema有差异,可开启mergeSchema参数自动合并
df = spark.read.option("mergeSchema", "true").parquet("hdfs://namenode:9000/user/data/partitioned_parquet/")
  1. 验证结果:用df.show()预览数据,df.printSchema()查看结构,确认读取正常。

Q2: 读取指定Parquet格式的Hive外部表对应的HDFS文件

这种场景有两种常用方案,按需选择:

方法一:直接读取表对应的HDFS路径

首先得拿到Hive外部表的存储路径——在Hive CLI里执行DESCRIBE FORMATTED <your_table_name>;,找到Location字段的值,然后用Q1的方法读取:

# 假设从Hive查到的路径是hdfs://namenode:9000/user/hive/warehouse/mydb.db/my_external_table
df = spark.read.parquet("hdfs://namenode:9000/user/hive/warehouse/mydb.db/my_external_table")

方法二:通过Hive元数据直接读表(更推荐)

既然是Hive外部表,直接借助Spark的Hive集成读取更省心,不用手动找路径,还能自动识别分区和表结构:

  1. 初始化带Hive支持的SparkSession:
spark = SparkSession.builder \
    .appName("Read Hive External Table") \
    .enableHiveSupport() \
    .getOrCreate()
  1. 读取表的两种方式:
  • 用Spark SQL查询:
df = spark.sql("SELECT * FROM mydb.my_external_table")
  • 用spark.table()快捷读取:
df = spark.table("mydb.my_external_table")

这种方式的优势是,表的分区规则、Schema都会直接沿用Hive的定义,做分区过滤时Spark还能自动优化查询。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:12:48