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

在SparkR中使用CreateDataFrame时“由于阶段失败而中止作业”

谢翰学
2023-03-14

按照本帖中的说明操作(https://spark.apache.org/docs/latest/sparkr.html#from-本地数据帧)我正在使用以下代码创建sparkdataframe:

library(SparkR, lib.loc = c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib")))
sparkR.session(master = "spark://master:7077", sparkConfig = list(spark.cores.max="8", spark.executor.cores = "4"))
data(iris)
iris = createDataFrame(iris)
head(iris)

但是head函数总是导致以下错误。我得到同样的错误,当我试图运行dim以及。我也尝试过as。DataFrame而不是createDataFrame。我还尝试在我的ipython笔记本中重新启动内核,并重新启动我的火花会话。

我的理解是,这是SparkR的一个非常基本的功能,所以我真的不知道为什么它不起作用。出于某种原因,当我使用read直接从数据源读取我的SparkDataFrame时。jdbc我没有问题。此外,我注意到错误行中的数字:“阶段XXX中的任务0…”每次失败时递增一。

我还注意到,这个错误似乎是由于执行器找不到Rscript的二进制文件,尽管我不确定为什么只有从本地数据创建的SparkDataFrame才会出现这种情况。帧,而不是从外部数据源提取的帧。

有人能帮我吗?

完整的错误堆栈跟踪是:

有趣的警告信息(X[[i]],…):FUN中的“使用Sepal_长度而不是Sepal.Length作为列名”警告消息(X[[i]],…):FUN(X[[i]],…)中的“使用Sepal_宽度而不是Sepal.Width作为列名”警告消息:FUN(X[[i]],…)中的“使用花瓣长度而不是花瓣.长度作为列名”警告消息:“使用花瓣宽度而不是花瓣宽度作为列名”

invokeJava中出错(isStatic=TRUE,className,methodName,…):组织。阿帕奇。火花SparkException:作业因阶段失败而中止:阶段45.0中的任务0失败4次,最近的失败:阶段45.0中的任务0.3丢失(TID 3372,10.0.0.5):java。木卫一。IOException:无法运行程序“Rscript”:错误=2,java上没有这样的文件或目录。lang.ProcessBuilder。在org上启动(ProcessBuilder.java:1048)。阿帕奇。火花应用程序编程接口。r、 美元。在org上创建流程(RRunner.scala:348)。阿帕奇。火花应用程序编程接口。r、 美元。org上的createRWorker(RRunner.scala:364)。阿帕奇。火花应用程序编程接口。r、 鲁纳。在org上计算(RRunner.scala:69)。阿帕奇。火花应用程序编程接口。r、 BaseRRDD。在组织上计算(RRDD.scala:49)。阿帕奇。火花rdd。RDD。组织上的computeOrReadCheckpoint(RDD.scala:319)。阿帕奇。火花rdd。RDD。迭代器(RDD.scala:283)位于org。阿帕奇。火花rdd。MapPartitionsRDD。计算(MapPartitionsRDD.scala:38)在组织。阿帕奇。火花rdd。RDD。组织上的computeOrReadCheckpoint(RDD.scala:319)。阿帕奇。火花rdd。RDD。迭代器(RDD.scala:283)位于org。阿帕奇。火花rdd。MapPartitionsRDD。计算(MapPartitionsRDD.scala:38)在组织。阿帕奇。火花rdd。RDD。组织上的computeOrReadCheckpoint(RDD.scala:319)。阿帕奇。火花rdd。RDD。迭代器(RDD.scala:283)位于org。阿帕奇。火花rdd。MapPartitionsRDD。计算(MapPartitionsRDD.scala:38)在组织。阿帕奇。火花rdd。RDD。组织上的computeOrReadCheckpoint(RDD.scala:319)。阿帕奇。火花rdd。RDD。迭代器(RDD.scala:283)位于org。阿帕奇。火花rdd。MapPartitionsRDD。计算(MapPartitionsRDD.scala:38)在组织。阿帕奇。火花rdd。RDD。组织上的computeOrReadCheckpoint(RDD.scala:319)。阿帕奇。火花rdd。RDD。迭代器(RDD.scala:283)位于org。阿帕奇。火花调度程序。结果任务。在org上运行任务(ResultTask.scala:70)。阿帕奇。火花调度程序。任务在组织上运行(Task.scala:85)。阿帕奇。火花遗嘱执行人。执行者$TaskRunner。在java上运行(Executor.scala:274)。util。同时发生的线程池执行器。java上的runWorker(ThreadPoolExecutor.java:1142)。util。同时发生的线程池执行器$Worker。在java上运行(ThreadPoolExecutor.java:617)。朗。丝线。运行(Thread.java:748)的原因是:java。木卫一。IOException:error=2,java上没有这样的文件或目录。lang.UNIXProcess。java上的forkAndExec(本机方法)。lang.UNIXProcess。(UNIXProcess.java:247)在java。lang.ProcessImpl。在java上启动(ProcessImpl.java:134)。lang.ProcessBuilder。开始(ProcessBuilder.java:1029)。。。还有24个

  1. 头(charEx)
  2. 头(charEx)
  3. 本地(x,...)
  4. 取(x, num)
  5. 取(x, num)
  6. 收藏(有限)
  7. 收藏(有限)
  8. 本地(x,...)
  9. call JStatic(org.apache.spark.sql.api.r.SQLUtils,dfToCols,.x@sdf)
  10. 调用Java(isStatic=TRUE,类名称,方法名称,...)
  11. 停止(readString(conn))

共有1个答案

吕琪
2023-03-14

我是这样理解的:

原因已读取。jdbc之所以有效,是因为在节点上执行操作不需要R:驱动程序(运行R的地方)将命令转换为Spark,然后将其复制到工作节点并在工作节点上执行。

createDataFrame失败的原因是,它会作为R命令复制到工作节点,因此节点需要有权访问Rscript

如果您想使用createDataFrame来处理数据,我建议您使用本地Sparksession(否则您必须将Rscript复制到工作节点)。如果您首先需要通过R将数据传递到Spark中,您可能需要重新考虑(您可能正在使用Spark,因为您有大量数据,通常最好将所有内容加载并保留在Spark一侧,然后将聚合块拉到内存中的R)。

 类似资料:
  • 我的理解是,这是SparkR的一个非常基本的功能,所以我真的不知道为什么它不能工作。由于某种原因,当我使用直接从数据源读取时,我没有问题。还有,我注意到错误行中的数字“:stage xxx中的task 0..”每次失败时递增1。 我还注意到,错误似乎来自于执行程序找不到的二进制文件,尽管我不确定为什么这只会发生在从本地data.frames创建的SparkDataFrames中,而不是从外部数据源

  • 我正在处理一些奇怪的错误信息,我认为这可以归结为内存问题,但我很难确定它,可以从专家那里得到一些指导。 我有一个两台机器的Spark(1.0.1)集群。两台机器都有8个核心;一台有16GB内存,另一台有32GB内存(这是主)。我的应用程序涉及计算图像中的成对像素亲和力,尽管我测试的图像到目前为止只有1920x1200大,16x16小。 我确实必须改变一些内存和并行性设置,否则我会得到显式的OutO

  • 我正在写一个简单的流媒体地图减少工作使用Python在亚马逊电子病历上运行。它基本上是用户记录的聚合器,将每个用户标识的条目分组在一起。 制图器 减速机: 此作业应在包含五个文本文件的目录上运行。EMR作业的参数包括: 输入:[桶名]/[输入文件夹名] 输出:[存储桶名称]/Output 映射器:[Bucket name]/Mapper.py Reducer:[存储桶名称]/Reducer.py

  • 我是nodejs测试的新手,使用mocha和Chai。现在,我在使用mocha测试API路由处理程序时遇到了问题。我的路由处理程序代码是 Upload函数只是一个multer实用程序,用于存储imagefile。我的测试代码是 运行此代码后显示的输出为

  • 我创建了一个简单的quarkus(版本0.21.2)应用程序,它使用hibernate orm和panache将实体保存到h2数据库。该实体包括一个,共。我还做了一些测试来确保凝乳有效。这些测试都可以正常工作,但当我在本地运行它们时,我会遇到以下异常: 我的实体如下所示: 这是我的测试: 还有本地测试: 我不知道为什么它找不到。

  • 我们有一个使用Blaze Meter(HTTPS调用)录制的脚本并在JMeter中运行,一个POST请求失败并显示“500内部服务器错误”。在Post请求中,JSON以“form-Data”的形式作为参数传递。当endpoint执行时,我们在HTTP标头中观察到Webkitformbounday,请给出一些解决方案 < li>HTTPs请求 < li>HTTP标头管理器 < li >发布请求正文在