Windows下用PySpark导出MySQL表为CSV触发Job Aborted异常
问题描述
在Windows系统中使用PySpark读取MySQL表后,尝试将DataFrame保存为CSV格式到本地D盘时持续报错。已将Scala版本调整为与spark_shell一致的2.13.8,执行代码后抛出Py4JJavaError,底层原因为java.lang.UnsatisfiedLinkError。
执行代码
import os import sys os.environ["PYSPARK_PYTHON"] = sys.executable os.environ["PYSPARK_DRIVER_PYTHON"] = sys.executable from pyspark.sql import functions as F from pyspark.sql import SparkSession spark = SparkSession.builder.appName("Export to CSV").getOrCreate() df = spark.read.format("jdbc").options( url=mysql_url, driver="com.mysql.jdbc.Driver", dbtable=table_name, user=username, password=password).load() df.show(10) df.coalesce(1).write.format("csv").mode("overwrite").option("header", "true").option("compression", "uncompressed").save("D:/logs/a")
错误信息(翻译后)
Py4JJavaError 调用o40.save时发生错误。 : org.apache.spark.SparkException: 任务中止。 at org.apache.spark.sql.errors.QueryExecutionErrors$.jobAbortedError(QueryExecutionErrors.scala:651) at org.apache.spark.sql.execution.datasources.FileFormatWriter$.write(FileFormatWriter.scala:288) ...(中间栈帧省略) Caused by: java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z at org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Native Method) at org.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:793) at org.apache.hadoop.fs.FileUtil.canRead(FileUtil.java:1218) at org.apache.hadoop.fs.FileUtil.list(FileUtil.java:1423) at org.apache.hadoop.fs.RawLocalFileSystem.listStatus(RawLocalFileSystem.java:601) ...(中间栈帧省略) at java.lang.Thread.run(Thread.java:748)
解决方案
- 以管理员身份运行程序:
Windows下Hadoop的本地IO操作需要足够权限才能访问系统目录,右键点击脚本或IDE,选择「以管理员身份运行」后再执行保存操作。 - 禁用Hadoop原生IO支持:
在初始化SparkSession时添加配置,绕过Windows下的原生库依赖问题:spark = SparkSession.builder.appName("Export to CSV") \ .config("spark.hadoop.io.nativeio.NativeIO.Windows.access.enabled", "false") \ .getOrCreate() - 补充Hadoop Windows原生库:
确认Spark环境中包含Windows版本的Hadoop原生库文件(hadoop.dll、winutils.exe),将这些文件所在路径添加到系统PATH环境变量中。若缺少文件,可从适配的Hadoop发行包中提取。 - 更换输出目录:
避免写入系统盘根目录或受保护路径,改为写入用户个人目录,例如:df.coalesce(1).write.format("csv").mode("overwrite").option("header", "true").option("compression", "uncompressed").save("C:/Users/你的用户名/Documents/output_csv")
内容的提问来源于stack exchange,提问作者user21323408
相关产品推荐
相关产品推荐

