我想从Spark运行我现有的R脚本。
我在我的机器上设置了R和Spark并尝试执行代码,但我得到了异常,但这不是很有帮助。
Spark Code -
String file = "/home/MSA2.R";
SparkConf sparkConf = new SparkConf().setAppName("First App")
.setMaster("local[1]");
@SuppressWarnings("resource")
JavaSparkContext sparkContext = new JavaSparkContext(sparkConf);
JavaRDD<String> rdd = sparkContext.textFile("/home/test.csv")
.pipe(file);
R代码 -
f1 <- read.csv("/home/testing.csv")
例外 -
线程中的异常&#34; main&#34; org.apache.spark.SparkException:Job 由于阶段失败而中止:阶段0.0中的任务0失败1次,大多数 最近的失败:阶段0.0中失去的任务0.0(TID 0,localhost): java.lang.IllegalStateException:退出状态为2的子进程。 命令运行:/home/MSA2.R java.util.NoSuchElementException:找不到密钥:1 rg.apache.spark.rpc.RpcTimeoutException:无法在120&gt;秒内收到任何回复。此超时由spark.rpc.askTimeout在&gt; org.apache.spark.rpc.RpcTimeout.org控制。$ apache $ spark $ rpc $ RpcTime&gt; out $$ createRpcTimeou tException(RpcTimeou t.scala:48)
调试问题没有多少例外。
任何人都可以建议这种方法是否正确。如果是,任何人都可以帮助解决问题,如果没有,请提出建议。
注意:我不想使用Spark R
上述代码的引用 - https://www.linkedin.com/pulse/executing-existing-r-scripts-from-spark-rutger-de-graaf
答案 0 :(得分:1)
实际错误是:
java.lang.IllegalStateException:退出状态为2的子进程。 命令运行:/home/MSA2.R
确保MSA2.R存在于给定位置和运行spark作业的同一群集中。
当脚本无法访问设备时,通常会退出状态2.
答案 1 :(得分:1)
我已经解决了这个问题。我添加了
#!/usr/bin/Rscript
在RScript的第一行,它起作用了。