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

如何在VSCode中通过Python/PySpark读写远程HDFS的Parquet文件?

解决方案:VSCode中Python脚本连接HDFS读取Parquet文件

问题根源

Jupyter Notebook里的sparkmagic已经预先配置了Livy集群连接、认证信息,Spark上下文默认绑定远程集群,相对路径直接映射到HDFS;而VSCode中本地启动的SparkSession默认是本地模式,会把相对路径解析成本地文件系统路径,导致找不到HDFS上的目标文件。

解决步骤

1. 配置SparkSession连接远程集群

修改main.py中的SparkSession初始化代码,添加和sparkmagic对齐的集群连接、认证配置:

import os
import yaml
from pyspark.sql import SparkSession

def main():
    spark = SparkSession.builder \
        .config("spark.sql.legacy.timeParserPolicy","LEGACY") \
        .config("spark.sql.legacy.parquet.datetimeRebaseModeInWrite", "LEGACY") \
        .config("spark.yarn.maxAttempts", 0) \
        # 绑定YARN集群模式
        .config("spark.master", "yarn") \
        .config("spark.submit.deployMode", "client") \
        # 配置HDFS默认文件系统(替换为你的集群实际地址)
        .config("spark.hadoop.fs.defaultFS", "hdfs://your-hdfs-nameservice") \
        # 配置Knox网关Basic认证,对应sparkmagic的配置
        .config("spark.hadoop.knox.gateway.url", "https://test.x.knox.y.fr:8443/gateway/cdp-proxy-api") \
        .config("spark.hadoop.knox.gateway.username", "admin") \
        .config("spark.hadoop.knox.gateway.password", "abcd") \
        .appName("HDFS_Parquet_Reader") \
        .getOrCreate()

    # 读取HDFS上的Parquet文件,推荐使用完整HDFS路径
    df = spark.read.parquet("hdfs://your-hdfs-nameservice/projects/DEV/parquet_folder/")
    # 若已将默认FS设为HDFS,也可直接用相对路径:spark.read.parquet("projects/DEV/parquet_folder/")

    Class_1(...)

if __name__ == "__main__":
    main()

2. 匹配集群依赖版本

根据你的Hadoop/CDP集群版本,添加对应依赖包确保兼容性:

# 在SparkSession构建链中添加该行,替换为集群对应的Hadoop版本
.config("spark.jars.packages", "org.apache.hadoop:hadoop-client:3.3.4")

3. 路径解析验证

  • 优先使用完整HDFS路径,避免相对路径的自动解析歧义
  • 若必须使用相对路径,务必确认spark.hadoop.fs.defaultFS已正确设置为HDFS地址,确保Spark将相对路径映射到HDFS而非本地文件系统

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:47:04