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

时间:2016-11-23 12:38:27

标签: apache-spark pyspark jupyter-notebook

我在Windows 7中使用Jupyter笔记本(Python 2.7)在PySpark中工作。我有一个名为pyspark.rdd.PipelinedRDD的{​​{1}}类型的RDD。尝试执行idSums时,收到以下错误:

idSums.saveAsTextFile("Output")

在我看来,RDD对象不应该有任何问题,因为我能够无错误地执行其他操作,例如:执行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 会产生正确的输出。

此外,创建idSums.collect()目录(包含所有子目录)并创建文件Output,但它是0字节。

4 个答案:

答案 0 :(得分:24)

你遗漏了winutils.exe一个hadoop二进制文件。根据x64 bit / x32位系统下载winutils.exe文件&设置你的hadoop家指向它。

第一种方式:

1.下载文件

2.在您的系统中创建hadoop文件夹ex“C:”

3.在hadoop目录中创建bin文件夹ex:C:\ hadoop \ bin

4.paste winutils.exe in bin ex:C:\ hadoop \ bin \ winuitls.exe

5.在系统属性中的用户变量 - >高级系统设置

创建新变量 名称: HADOOP_HOME 路径: C:\的hadoop \

第二种方式:

您可以使用以下命令直接在您的Java程序中设置hadoop home:

System.setProperty(“hadoop.home.dir”,“C:\ hadoop”);

答案 1 :(得分:1)

尽管设置了HADOOP_HOME,但在加载在其他计算机上构建并复制到Windows系统中的模型时,我也遇到类似的异常,说权限问题。 我只是在模型文件夹上运行以下命令-

winutils.exe chmod -R 777模型路径。

答案 2 :(得分:0)

与@Hapreet Varma

相同的程序

你缺少winutils.exe一个hadoop二进制文件。根据x64位/ x32位系统下载winutils.exe文件&设置你的hadoop家指向它。

第一种方式:

1.下载文件

2.在您的系统中创建hadoop文件夹ex“C:”

3.在hadoop目录中创建bin文件夹ex:C:\ hadoop \ bin

4.paste winutils.exe in bin ex:C:\ hadoop \ bin \ winuitls.exe

5.在系统属性中的用户变量 - >高级系统设置

创建新变量名称:HADOOP_HOME路径:C:\ hadoop \

第二种方式:

您可以使用以下命令直接在您的Java程序中设置hadoop home:

System.setProperty(“hadoop.home.dir”,“C:\ hadoop”);

如果你在Eclipse Oxygen中工作,那么在系统属性中设置变量后必须重新启动Eclipse,否则它将无效。 如果路径设置错误,Eclipse将在日志开头显示winutils的当前设置位置。像这样的事情

2018-05-05 18:27:47错误Shell:397 - 无法在hadoop二进制路径中找到winutils二进制文件

java.io.IOException:找不到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)

答案 3 :(得分:0)

我发现了其他信息,可能会帮助其他人解决此问题。有时,当您在Windows计算机上设置spark时,无法获取hadoop.dll文件。只需从winutils GitRepo(https://github.com/4ttty/winutils)中获取hadoop.dll文件,并将其放在Windows系统32文件夹中。完成此操作后,便可以写入磁盘。

此答案的原始功劳-https://programmersought.com/article/53121203250/