Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash grep-i shell命令的rdd.pipe抛出java.lang.IllegalStateException?_Bash_Scala_Apache Spark_Rdd - Fatal编程技术网

Bash grep-i shell命令的rdd.pipe抛出java.lang.IllegalStateException?

Bash grep-i shell命令的rdd.pipe抛出java.lang.IllegalStateException?,bash,scala,apache-spark,rdd,Bash,Scala,Apache Spark,Rdd,我正在运行RDD spark操作中使用管道的代码: 我尝试过以下代码片段: //PIPE - run a external shell script in spark val x = sc.parallelize(Array("A", "Ba", "C", "AD")) val y = x.pipe("grep -i A") println(x.collect()) println(y.collect()) 但我得到了: org.apache.spark.sparkeexception:作业

我正在运行RDD spark操作中使用管道的代码:

我尝试过以下代码片段:

//PIPE - run a external shell script in spark

val x = sc.parallelize(Array("A", "Ba", "C", "AD"))
val y = x.pipe("grep -i A")
println(x.collect())
println(y.collect())
但我得到了:

org.apache.spark.sparkeexception:作业因阶段失败而中止:阶段61.0中的任务0失败1次,最近的失败:阶段61.0中的任务0.0丢失(TID 592,本地主机,执行器驱动程序):java.lang.IllegalStateException:子进程退出,状态为1。命令run:grep-ia用于运行上述代码段

有没有办法通过
管道运行
grep-i
命令

我尝试调用一个
.sh
脚本,它正在工作,但我想将它作为shell命令运行。
这是因为数据是分区的。即使您在
.sh
文件中使用与您所提到的相同的命令,您也会得到相同的错误。如果将RDD重新分区到一个分区,它应该可以正常工作:

val y = x.repartition(1).pipe("grep -i A")
根据:

管道(命令,[envVars])

通过shell命令(例如Perl或 bash脚本。RDD元素被写入进程的stdin和行中 其标准输出的输出将作为字符串的RDD返回


当您使用
grep
命令时,您不能独立地处理每一行,因为如果一个元素失败,它就存在

子进程以状态1退出
表示Grep命令以非零状态退出。grep的退出代码1仅仅意味着没有选择/匹配任何行-这对于RDD中没有A的所有元素都是正确的them@tomgalpin:但是我在输入RDD中有一个元素A。正确,但是grep命令是针对所有元素独立运行的。因此,当它再次以“Ba”为例运行时,grep“无法”匹配任何行,因此以失败的退出代码退出,从而给出上述错误。在.sh文件中执行此操作时,.sh文件可能每次都退出0。这更有意义吗?@tomgalpin谢谢,任何解决此问题的替代方法
,即使您在.sh文件中使用与您提到的相同的命令,您也会得到相同的错误。
除非您在脚本中处理错误。x.repartition(1)。管道工作得很好。谢谢你的团队。