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

Windows10本地Spark生成Parquet文件失败问题排查与解决

问题描述

通过Spark读取CSV并转换为Parquet时,Windows 10本地运行失败,但代码在Google Colab可正常执行。

读取CSV代码:

variable = spark.read.csv(r'C:\Users\xxxxx.xxxx\Desktop\archive\test.csv', sep=';', inferSchema=True, header=True)

尝试两种写入Parquet的路径格式:

# 方式一
variable.write.parquet(
    path=r'C:\Users\\xxxxx.xxxx\Desktop\archive\parquet\new.parquet',
    mode='overwrite'
)

# 方式二
variable.write.parquet(
    path=r'C:\Users\xxxxx.xxxx\Desktop\archive\parquet\\',
    mode='overwrite'
)

两种方式均触发相同错误:

Py4JJavaError: An error occurred while calling o186.parquet.
: org.apache.spark.SparkException: Job aborted.
    at org.apache.spark.sql.errors.QueryExecutionErrors$.jobAbortedError(QueryExecutionErrors.scala:651)
    at org.apache.spark.sql.execution.datasources.FileFormatWriter$.write(FileFormatWriter.scala:288)
    at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand.run(InsertIntoHadoopFsRelationCommand.scala:186)
    at org.apache.spark.sql.execution.command.DataWritingCommandExec.sideEffectResult$lzycompute(commands.scala:113)
    at org.apache.spark.sql.execution.command.DataWritingCommandExec.sideEffectResult(commands.scala:111)
    at org.apache.spark.sql.execution.command.DataWritingCommandExec.executeCollect(commands.scala:125)
    at org.apache.spark.sql.execution.QueryExecution$$anonfun$eagerlyExecuteCommands$1.$anonfun$applyOrElse$1(QueryExecution.scala:98

核心错误信息:

Job aborted due to stage failure: 
Task 1 in stage 14.0 failed 1 times, most recent failure: Lost task 1.0 in stage 14.0 (TID 63) 
(XXXXX-xxxx.xxx.local executor driver): java.io.IOException: (null) entry in command string: null chmod 0644 C:\Users\xxxx.xxxx\Desktop\xxx.parquet_temporary\0_temporary\attempt_202304111306381850890757855117295_0014_m_000001_63\part-00001-1ea07aa8-0302-492c-993c-86ce32f575d8-c000.snappy.parquet
原因分析

Spark底层依赖Hadoop的文件系统工具,chmod是Linux/Unix系统的权限修改命令,Windows系统没有该命令。Google Colab基于Linux环境,因此代码可正常运行;而Windows本地环境中,Spark尝试执行chmod命令时找不到对应工具,导致任务中止。

解决方法
  • 配置Windows版Hadoop工具包

    1. 下载与Spark依赖版本匹配的winutils工具包
    2. 创建HADOOP_HOME环境变量,指向winutils所在目录
    3. 将%HADOOP_HOME%\bin添加到系统PATH环境变量
    4. 在%HADOOP_HOME%\etc\hadoop目录下创建hadoop-env.cmd文件,添加内容:set HADOOP_HOME=你的winutils路径
  • 修改Spark文件系统配置
    在初始化SparkSession时添加配置,强制使用本地文件系统实现,避免调用Linux权限命令:

    from pyspark.sql import SparkSession
    
    spark = SparkSession.builder \
        .appName("CSVtoParquet") \
        .config("spark.hadoop.fs.file.impl", "org.apache.hadoop.fs.LocalFileSystem") \
        .getOrCreate()
    
  • 修正写入路径格式
    避免路径末尾带反斜杠,将第二种路径改为:

    variable.write.parquet(
        path=r'C:\Users\xxxxx.xxxx\Desktop\archive\parquet',
        mode='overwrite'
    )
    

    注意使用原始字符串r''时,单个反斜杠即可,不要出现重复反斜杠。

  • 以管理员身份运行程序
    右键点击Python IDE或命令提示符,选择「以管理员身份运行」,避免因文件权限不足导致的写入失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:43:24