当前位置: 首页 > 知识库问答 >
问题:

rdd。管道投掷java。lang.IllegalStateException for grep-i shell命令?

闻人昕
2023-03-14

我正在运行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())

但我得到了:

组织。阿帕奇。火花SparkException:作业因阶段失败而中止:阶段61.0中的任务0失败1次,最近的失败:阶段61.0中的任务0.0丢失(TID 592,localhost,executor driver):java。lang.IllegalStateException:子进程退出,状态为1。运行命令:grep-i A用于运行上述代码段。

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

我试着调用一个。sh脚本,它正在工作,但我想将其作为shell命令运行。参考


共有1个答案

李森
2023-03-14
匿名用户

这是因为数据是分区的。即使在中使用相同的命令。sh文件正如您所提到的,您将得到相同的错误。如果将RDD重新分区到一个分区,它应该可以正常工作:

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

根据官方文件:

管道(命令,[envVars]):

通过shell命令传输RDD的每个分区,例如Perl或bash脚本。RDD元素被写入进程的标准输入,输出到其标准输出的行作为字符串的RDD返回。

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

 类似资料:
  • 有人可以解释我什么时候使用关键字 throw new 有用.而不是在方法的签名旁边使用抛出? 我知道当方法抛出Checked Exception时。Java迫使我们通过将Exception处理到try-catch块中,或者通过在签名旁边的关键字throws指定将在其他地方完成,从而直接在方法中处理它。 然而,我很难理解何时使用关键字throw new是有用的,以及为什么。它与处理未选中的异常有关吗

  • 我正在用python运行下面的代码 我每次都会遇到下面的错误-有人能帮忙吗! OpenCV错误:未指定的错误(该函数未实现。使用Windows、GTK 2.x或Carbon支持重建库。如果您在Ubuntu或Debian上,请安装libgtk2.0-dev和pkg config,然后重新运行cmake或configure脚本),位于cvShowImage、file/Users/travis/buil

  • 我有两个类(SimManager和Sim),我想为它们创建模拟对象,然后使用存根方法。 测试在上面第9行抛出这两个错误跟踪。 第一: Java语言lang.VerifyError:org/mockito/cglib/core/reflectils at org。莫基托。cglib。果心KeyFactory$发电机。在org上生成Class(KeyFactory.java:167)。莫基托。cgli

  • 我在视图中有一个ImageView,并尝试用它显示一个WritableImage实例。我正在外线程中绘制它,并通过侦听ObjectProperty的更改事件将其传递给视图。 imageView应该准备好接收图像,它由我的主视图显示。但是这是一个不合法的例外 线程“Thread-4”Java . lang . illegalstateexception中的异常:不在FX应用程序线程上;当前线程=线程

  • 我有下面的代码,它按照预期工作: 我想知道是否有一种方法,只有一个orElseThrow-Part,或做它更少的冗余?

  • 我通过阅读S G Ganesh和Tushar Sharma写的书来学习OCJP考试。在第346页,有一段文字说: 如果你试着改变投掷条款呢?在重写方法中更改throws子句的方法有很多,包括以下方法: a。不提供任何抛出子句。列出要抛出的更多常规检查异常。除了基本方法中给定的已检查异常之外,还列出了更多已检查异常。 如果尝试这三种情况中的任何一种,都会得到编译器错误。例如,尝试不在实现IntRea