【问题标题】:I can read from local file in py spark but i can't write data frame in local file我可以在 py spark 中读取本地文件,但无法在本地文件中写入数据帧
【发布时间】:2021-10-01 04:28:41
【问题描述】:
df.write.csv("sdf") 

" 21/07/24 15:27:23 错误 FileFormatWriter: 中止作业 a9914f88-3ab9-480a-984f-33d0e598c0fc。 java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z 在 org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(本机方法) 在 org.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:645) 在 org.apache.hadoop.fs.FileUtil.canRead(FileUtil.java:1230) 在 org.apache.hadoop.fs.FileUtil.list(FileUtil.java:1435) 在 org.apache.hadoop.fs.RawLocalFileSystem.listStatus(RawLocalFileSystem.java:493) 在 org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1868) 在 org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1910) 在 org.apache.hadoop.fs.ChecksumFileSystem.listStatus(ChecksumFileSystem.java:678) 在 org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1868) 在 org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1910) 在 org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter.getAllCommittedTaskPaths(FileOutputCommitter.java:332) 在 org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter.commitJobInternal(FileOutputCommitter.java:402) 在 org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter.commitJob(FileOutputCommitter.java:375) 在 org.apache.spark.internal.io.HadoopMapReduceCommitProtocol.commitJob(HadoopMapReduceCommitProtocol.scala:182) 在 org.apache.spark.sql.execution.datasources.FileFormatWriter$.write(FileFormatWriter.scala:220) 在 org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand.run(InsertIntoHadoopFsRelationCommand.scala:188) 在 org.apache.spark.sql.execution.command.DataWritingCommandExec.sideEffectResult$lzycompute(commands.scala:108) 在 org.apache.spark.sql.execution.command.DataWritingCommandExec.sideEffectResult(commands.scala:106) 在 org.apache.spark.sql.execution.command.DataWritingCommandExec.doExecute(commands.scala:131) 在 org.apache.spark.sql.execution.SparkPlan.$anonfun$execute$1(SparkPlan.scala:180) 在 org.apache.spark.sql.execution.SparkPlan.$anonfun$executeQuery$1(SparkPlan.scala:218) 在 org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151) 在 org.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:215) 在 org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:176) 在 org.apache.spark.sql.execution.QueryExecution.toRdd$lzycompute(QueryExecution.scala:132) 在 org.apache.spark.sql.execution.QueryExecution.toRdd(QueryExecution.scala:131) 在 org.apache.spark.sql.DataFrameWriter.$anonfun$runCommand$1(DataFrameWriter.scala:989) 在 org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$5(SQLExecution.scala:103) 在 org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:163) 在 org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$1(SQLExecution.scala:90) 在 org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:775) 在 org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:64) 在 org.apache.spark.sql.DataFrameWriter.runCommand(DataFrameWriter.scala:989) 在 org.apache.spark.sql.DataFrameWriter.saveToV1Source(DataFrameWriter.scala:438) 在 org.apache.spark.sql.DataFrameWriter.saveInternal(DataFrameWriter.scala:415) 在 org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:293) 在 org.apache.spark.sql.DataFrameWriter.csv(DataFrameWriter.scala:979) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244) 在 py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) 在 py4j.Gateway.invoke(Gateway.java:282) 在 py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) 在 py4j.commands.CallCommand.execute(CallCommand.java:79) 在 py4j.GatewayConnection.run(GatewayConnection.java:238) 在 java.lang.Thread.run(Unknown Source) Traceback(最近一次调用最后一次):文件“”,第 1 行,在文件中 “C:\spark\python\pyspark\sql\readwriter.py”,第 1372 行,在 csv 中 self._jwrite.csv(路径)文件“C:\spark\python\lib\py4j-0.10.9-src.zip\py4j\java_gateway.py”,行 1305,在 call 文件“C:\spark\python\pyspark\sql\utils.py”中,行 111,在装饰 返回 f(*a, **kw) 文件“C:\spark\python\lib\py4j-0.10.9-src.zip\py4j\protocol.py”,第 328 行, 在 get_return_value py4j.protocol.Py4JJavaError: 发生错误 在调用 o40.csv 时。 :org.apache.spark.SparkException:作业中止。 在 org.apache.spark.sql.execution.datasources.FileFormatWriter$.write(FileFormatWriter.scala:231) 在 org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand.run(InsertIntoHadoopFsRelationCommand.scala:188) 在 org.apache.spark.sql.execution.command.DataWritingCommandExec.sideEffectResult$lzycompute(commands.scala:108) 在 org.apache.spark.sql.execution.command.DataWritingCommandExec.sideEffectResult(commands.scala:106) 在 org.apache.spark.sql.execution.command.DataWritingCommandExec.doExecute(commands.scala:131) 在 org.apache.spark.sql.execution.SparkPlan.$anonfun$execute$1(SparkPlan.scala:180) 在 org.apache.spark.sql.execution.SparkPlan.$anonfun$executeQuery$1(SparkPlan.scala:218) 在 org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151) 在 org.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:215) 在 org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:176) 在 org.apache.spark.sql.execution.QueryExecution.toRdd$lzycompute(QueryExecution.scala:132) 在 org.apache.spark.sql.execution.QueryExecution.toRdd(QueryExecution.scala:131) 在 org.apache.spark.sql.DataFrameWriter.$anonfun$runCommand$1(DataFrameWriter.scala:989) 在 org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$5(SQLExecution.scala:103) 在 org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:163) 在 org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$1(SQLExecution.scala:90) 在 org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:775) 在 org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:64) 在 org.apache.spark.sql.DataFrameWriter.runCommand(DataFrameWriter.scala:989) 在 org.apache.spark.sql.DataFrameWriter.saveToV1Source(DataFrameWriter.scala:438) 在 org.apache.spark.sql.DataFrameWriter.saveInternal(DataFrameWriter.scala:415) 在 org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:293) 在 org.apache.spark.sql.DataFrameWriter.csv(DataFrameWriter.scala:979) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244) 在 py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) 在 py4j.Gateway.invoke(Gateway.java:282) 在 py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) 在 py4j.commands.CallCommand.execute(CallCommand.java:79) 在 py4j.GatewayConnection.run(GatewayConnection.java:238) 在 java.lang.Thread.run(Unknown Source) 引起:java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z 在 org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(本机方法) 在 org.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:645) 在 org.apache.hadoop.fs.FileUtil.canRead(FileUtil.java:1230) 在 org.apache.hadoop.fs.FileUtil.list(FileUtil.java:1435) 在 org.apache.hadoop.fs.RawLocalFileSystem.listStatus(RawLocalFileSystem.java:493) 在 org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1868) 在 org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1910) 在 org.apache.hadoop.fs.ChecksumFileSystem.listStatus(ChecksumFileSystem.java:678) 在 org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1868) 在 org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1910) 在 org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter.getAllCommittedTaskPaths(FileOutputCommitter.java:332) 在 org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter.commitJobInternal(FileOutputCommitter.java:402) 在 org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter.commitJob(FileOutputCommitter.java:375) 在 org.apache.spark.internal.io.HadoopMapReduceCommitProtocol.commitJob(HadoopMapReduceCommitProtocol.scala:182) 在 org.apache.spark.sql.execution.datasources.FileFormatWriter$.write(FileFormatWriter.scala:220)

【问题讨论】:

  • 设置环境变量HADOOP_HOME然后重试
  • 我之前已将 HADOOP_HOME 设置为包含 winutils.exe 文件的 C:\winutils 路径。

标签: python apache-spark pyspark


【解决方案1】:

除了获取 winutils.exe 和设置 hadoop_home。 请检查您的 bin 中是否有 hadoop.dll 二进制文件。 如果没有,请从 github repo 下载它。

https://github.com/cdarlint/winutils/blob/master/hadoop-3.2.1/bin/hadoop.dll

它对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 2018-02-22
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 2018-01-25
    相关资源
    最近更新 更多