Pyspark上saveAsTextFile()中命令字符串异常中的(空)条目

xcitsw88  于 2023-03-01  发布在  Spark
关注(0)|答案(5)|浏览(221)

我正在使用PySpark在Windows 7中运行Jupyter笔记本(Python 2.7)。我有一个名为idSums的类型为pyspark.rdd.PipelinedRDD的RDD。当尝试执行idSums.saveAsTextFile("Output")时,我收到以下错误:

Py4JJavaError: An error occurred while calling o834.saveAsTextFile.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 33.0 failed 1 times, most recent failure: Lost task 1.0 in stage 33.0 (TID 131, localhost): java.io.IOException: (null) entry in command string: null chmod 0644 C:\Users\seride\Desktop\Experiments\PySpark\Output\_temporary\0\_temporary\attempt_201611231307_0033_m_000001_131\part-00001

在我看来,RDD对象不应该有任何问题,因为我能够毫无错误地执行其他操作,例如,执行idSums.collect()会产生正确的输出。
此外,创建了Output目录(以及所有子目录),并创建了文件part-00001,但它是0字节。

5q4ezhmt

5q4ezhmt1#

您缺少winutils.exe hadoop二进制文件。根据x64位/x32位系统,下载winutils.exe文件并将hadoop主目录设置为指向它。
第一种方法:
1.下载文件
1.在系统中创建hadoop文件夹,例如C:
1.在hadoop目录中创建bin文件夹,例如:C:\hadoop\bin
1.将winutils.exe粘贴到bin中,例如:C:\hadoop\bin\winutils.exe
1.在系统属性-〉高级系统设置的用户变量中
创建新变量名称:HADOOP_HOME路径:x1米11米1x
第二种方法:
您可以使用如下命令直接在Java程序中设置hadoop home:

System.setProperty("hadoop.home.dir","C:\hadoop" );
l7mqbcuq

l7mqbcuq2#

我有一个类似的例外,说权限问题时,加载模型内置在其他一些机器和复制到我的Windows系统,虽然我的HADOOP_HOME设置。
我刚刚在我的模型文件夹上运行了以下命令:

winutils.exe chmod -R 777 model-path
nwlqm0z1

nwlqm0z13#

与@Hapreet Varma上述程序相同
缺少Hadoop二进制文件winutils.exe。根据x64位/x32位系统,下载winutils.exe文件并将Hadoop主目录设置为指向该文件。
第一种方法:
1.下载文件
2.在您的系统中创建hadoop文件夹ex "C:"
3.在Hadoop目录中创建bin文件夹,例如:C:\Hadoop\bin
4.将winutils.exe粘贴到bin中,例如:C:\hadoop\bin\winuitls.exe
5.在系统属性的用户变量中-〉高级系统设置
创建新变量名称:HADOOP_HOME路径:C:\Hadoop
第二种方法:
您可以使用如下命令直接在Java程序中设置hadoop home:
系统. setProperty("Hadoop. home. dir","C:\Hadoop");

    • 如果您正在Eclipse Oxygen中工作,则必须在系统属性中设置变量后重新启动Eclipse,否则它将无法工作。**如果路径设置错误,Eclipse将在日志的开头显示winutils的当前设置位置。类似于以下内容
    • 2018 - 05 - 05 18:27:47错误 shell :397-无法在hadoop二进制路径中找到winutils二进制文件**
    • java. io. IO异常:无法在Hadoop二进制文件中找到可执行文件null\bin\winutils.exe。**

完整的错误日志在这里

2018-05-05 18:27:47 ERROR Shell:397 - Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
    at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:379)
    at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:394)
    at org.apache.hadoop.util.Shell.<clinit>(Shell.java:387)
    at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:80)
    at org.apache.hadoop.security.SecurityUtil.getAuthenticationMethod(SecurityUtil.java:611)
    at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:273)
    at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:261)
    at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:791)
    at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:761)
    at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:634)
    at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2464)
    at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2464)
    at scala.Option.getOrElse(Option.scala:121)
    at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2464)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:292)
    at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2486)
    at org.apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:930)
    at org.apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:921)
    at scala.Option.getOrElse(Option.scala:121)
    at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:921)
    at com.dataflair.spark.Wordcount$.main(Wordcount.scala:13)
    at com.dataflair.spark.Wordcount.main(Wordcount.scala)
dm7nw8vv

dm7nw8vv4#

我发现了一些可以帮助其他人解决这个问题的信息。有时候当你在windows机器上安装spark时,你无法获得hadoop.dll文件。简单地从winutils GitRepo(https://github.com/4ttty/winutils)中获取hadoop.dll文件,并将其放在windows system 32文件夹中。在我完成了这些操作后,我就可以写入磁盘了。
此答案的原始学分-https://programmersought.com/article/53121203250/

mnowg1ta

mnowg1ta5#

即使在设置bin路径之后,如果它不起作用,那么您需要关闭Eclipse ScalaIDE应用程序,然后再次打开它并尝试运行它。

相关问题