2017-05-23 1 views
0

Im Anschluss an die Anweisungen in diesem Beitrag (https://spark.apache.org/docs/latest/sparkr.html#from-local-data-frames) mit Ich schaffe einen sparkdataframe mit dem folgenden Code:„Auftragsabbruch wegen Stufe Fehler“, wenn CreateDataFrame in SparkR

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) 

Aber die head Funktion immer auf das führt unter Fehler. Ich bekomme den gleichen Fehler, wenn ich versuche, auch dim zu laufen. Ich habe auch versucht as.DataFrame anstelle von createDataFrame. Ich habe auch versucht, den Kernel in meinem Ipython-Notebook neu zu starten und meine Spark-Sitzung neu zu starten.

Mein Verständnis ist, dass dies eine ziemlich grundlegende Funktion von SparkR ist, also bin ich wirklich ratlos dafür, warum es nicht funktioniert. Aus irgendeinem Grund, wenn ich meine SparkDataFrame direkt von einer Datenquelle unter Verwendung read.jdbc lese, habe ich kein Problem. Außerdem habe ich festgestellt, dass die Zahl in der Zeile des Fehlers ": Task 0 in der Stufe XXX .." bei jedem Fehler um eins erhöht wird.

Ich bemerkte auch, dass der Fehler von der Tatsache zu kommen scheint, dass die Executoren die Binärdatei für Rscript nicht finden können, obwohl ich nicht sicher bin, warum dies nur für SparkDataFrames geschieht, die aus lokalen Daten erstellt werden. Frames, und nicht von denen, die aus einer externen Datenquelle gezogen werden.

Könnte jemand bitte mir dabei helfen?

Der vollständige Fehler-Stack-Trace:

Warnmeldung in FUN (X [[i]], ...): „Use Sepal_Length statt Sepal.Length als Spaltenname“ Warnmeldung in FUN (X [[i]], ...): "Verwenden Sie Sepal_Width anstelle von Sepal.Width als Spaltenname" Warnmeldung in FUN (X [[i]], ...): "Verwenden Sie Petal_Length anstelle von Petal.Length als Spalte Name“Warnmeldung in FUN (X [[i]], ...):‚Use Petal_Width statt Petal.Width als Spaltenname‘

Fehler in invokeJava (isStatic = TRUE, Klassenname, Methodenname, ...): org.apache.spark.SparkException: Job abgebrochen wegen Stufefehler: Task 0 in Stufe 45.0 ist viermal fehlgeschlagen, letzter Fehler: Lost Aufgabe 0.3 in Stufe 45.0 (TID 3372, 10.0.0.5): java.io.IOException: Programm "Rscript" kann nicht ausgeführt werden: Fehler = 2, Nein Datei oder Verzeichnis unter java.lang.ProcessBuilder.start (ProcessBuilder. java: 1048) um ​​ org.apache.spark.api.r.RRunner $ .createRProcess (RRunner.scala: 348) um ​​ org.apache.spark.api.r.RRunner $ .createRWorker (RRunner.scala: 364) unter org.apache.spark.api.r.RRunner.compute (RRunner.scala: 69) um org.apache.spark.api.r.BaseRRDD.compute (RRDD.scala: 49) um org.apache.spark.rdd.RDD.computeOrReadCheckpoint (RDD.scala: 319) um org.apache.spark.rdd.RDD.iterator (RDD.scala: 283) um org.apache.spark.rd.MapPartitionsRDD .compute (MapPartitionsRDD.scala: 38) bei org.apache.spark.rdd.RDD.computeOrReadCheckpoint (RDD.scala: 319) bei org.apache.spark.rdd.RDD.iterator (RDD.scala: 283) um org.apache.spark.rdd.MapPartitionsRDD.compute (MapPartitionsRDD.scala: 38) bei org.apache.spark.rdd.RDD.computeOrReadCheckpoint (RDD.scala: 319) bei org.apache.spark.rdd.RDD .iterator (RDD.scala: 283) um org.apache.spark.rdd.MapPartitionsRDD.compute (MapPartitionsRDD.scala: 38) bei org.apache.spark.rdd.RDD.computeOrReadCheckpoint (RDD.scala: 319) bei org.apache.spark.r dd.RDD.iterator (RDD.scala: 283) um org.apache.spark.rdd.MapPartitionsRDD.compute (MapPartitionsRDD.scala: 38) bei org.apache.spark.rdd.RDD.computeOrReadCheckpoint (RDD.scala: 319) bei org.apache. spark.rdd.RDD.iterator (RDD.scala: 283) um org.apache.spark.scheduler.ResultTask.runTask (ResultTask.scala: 70) um org.apache.spark.scheduler.Task.run (Task. scala: 85) bei org.apache.spark.executor.Executor $ TaskRunner.run (Executor.scala: 274) bei java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) bei java. util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) bei java.lang.Thread.run (Thread.java:748) Verursacht von: java.io.IOException: error = 2, Keine solche Datei oder Verzeichnis unter java.lang.UNIXProcess.forkAndExec (Native Methode) um java.lang.UNIXProcess. (UNIXProcess.java:247) um java.lang. ProcessImpl.start (ProcessImpl.java:134) bei java.lang.ProcessBuilder.start (ProcessBuilder.java:1029) ... 24 weitere

Treiber Stacktrace: bei org.apache.spark.scheduler.DAGScheduler. org $ apache $ spark $ Scheduler $ DAGScheduler $$ failJobAndIndependentStages (DAGScheduler.scala: 1450) bei org.apache.spark.scheduler.DAGScheduler $$ anonfun $ abortStage $ 1.Apply (DAGScheduler.scala: 1438) bei org .apache.spark.scheduler.DAGScheduler $ anonfun $ abortStage $ 1.apply (DAGScheduler.scala: 1437) um scala.collection.mutable.ResizableArray $ class.foreach (ResizableArray.scala: 59) bei scala.collection.mutable.ArrayBuffer.foreach (ArrayBuffer. scala: 48) bei org.apache.spark.scheduler.DAGScheduler.abortStage (DAGScheduler.scala: 1437) bei org.apache.spark.scheduler.DAGScheduler $$ anonfun $ handleTaskSetFailed $ 1.Apply (DAGScheduler.scala: 811) bei org.apache.spark.scheduler.DAGScheduler $$ anonfun $ handleTaskSetFailed $ 1.Apply (DAGScheduler.scala: 811) bei scala.Option.foreach (Option.scala: 257) bei org.apache.spark .scheduler.DAGScheduler.handleTaskSetFailed (DAGScheduler.scala: 811) bei org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.doOnReceive (DAGScheduler.scala: 1659) bei org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive (DAGScheduler.scala: 1618) bei org.apache.spark .scheduler.DAGSchedulerEventProcessLoop.onReceive (DAGScheduler.scala: 1607) bei org.apache.spark.util.EventLoop $$ anon $ 1.run (EventLoop.scala: 48) um org.apache.spark.scheduler.DAGScheduler. runJob (DAGScheduler.scala: 632) bei org.apache.spark.SparkContext.runJob (SparkContext.scala: 1871) bei org.apache.spark.SparkContext.runJob (SparkContext.scala: 1884) bei org.apache. spark.SparkContext.runJob (SparkContext.scala: 1897) um org.apache.spark.sql.execution.SparkPlan.executeTake (SparkPlan.scala: 347) bei org.apache.spark.sql.execution.CollectLimitExec.executeCollect (limit.scala: 39) bei org.apache .spark.sql.Dataset $$ anonfun $ org $ apache $ spark $ sql $ Datensatz $$ führt $ 1 $ 1.apply aus (Dataset.scala: 2183) um org.apache.spark.sql.execution.SQLExecution $ .withNewExecutionId (SQLExecution.scala: 57) bei org.apache.spark.sql.Dataset.withNewExecutionId (Dataset.scala: 2532) bei org.apache.spark.sql.Dataset.org $ apache $ spark $ sql $ Dataset $$ führt $ 1 (Dataset.scala: 2182) um org.apache.spark.sql.Datensatz $$ anonfun $ org $ apache $ spark $ sql $ Datensatz $$ sammeln $ 1.apply (Dataset.scala: 2187) um org.apache.spark.sql.Dataset $$ anonfun $ org $ apache $ spark $ sql $ Dataset $$ sammelt $ 1.apply (Dataset.scala: 2187) bei org.apache.spark.sql.Dataset.withCallback (Dataset.scala: 2545) unter org.apache.spark.sql.Dataset.org $ apache $ spark $ sql $ Datensatz $$ sammeln (Dataset.scala: 2187) bei org.apache.spark.sql.Dataset.collect (Dataset.scala: 2163) um org.apache.spark.sql.api.r. SQLUtils $ .dfToCols (SQLUtils.scala: 208) um ​​ org.apache.spark.sql.api.r.SQLUtils.dfToCols (SQLUtils.scala) um sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Methode) um sun. reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) bei sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) bei java.lang.reflect.Method.invoke (Method.java:498) bei org.apache.spark.api.r.RBackendHandler.handleMethodCall (RBackendHandler.scala: 141) bei org.apache.spark.api.r.RBackendHandler.channelRead0 (RBackendHandler.scala: 86) bei org.apache.spark.api.r.RBackendHandler.channelRead0 (RBackendHandler.scala : 38) bei io.netty.channel.SimpleChannelInboundHandler.channelRead (SimpleChannelInboundHandler.java:105) bei io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:308) bei io.netty.channel.AbstractChannelHandlerContext.fireChannelRead (AbstractChannelHandlerContext.java:294) bei io.netty.handler.codec.MessageToMessageDecoder.channelRead (MessageToMessageDecoder.java:103) bei io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:308) bei io.netty.channel.AbstractChannelHandlerContext.fireChannelRead (AbstractChannelHandlerContext.java:294) bei io.netty.handler.codec.ByteToMessageDecoder.channelRead (ByteToMessageDecoder.java:244) bei io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java308) um io.netty.channel.AbstractChannelHandlerContext.fireChannelRead (AbstractChannelHandlerContext.java:294) bei io.netty.channel.DefaultChannelPipeline.fireChannelRead (DefaultChannelPipeline.java:846) bei io.netty.channel.nio.AbstractNioByteChannel $ NioByteUnsafe .Read (AbstractNioByteChannel.java:131) bei io.netty.channel.nio.NioEventLoop.processSelectedKey (NioEventLoop.java:511) bei io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized (NioEventLoop.java:468) um io.netty.channel.nio.NioEventLoop.processSelectedKeys (NioEventLoop.java:382) bei io.netty.channel.nio.NioEventLoop.run (NioEventLoop.java:354) um io.netty.util.concurrent.SingleThreadEventExecutor $ 2.run (SingleThreadEventExecutor.java:111) bei io.netty.util.concurrent.DefaultThreadFactory $ DefaultRunnableDecorator.run (DefaultThreadFactory.java:137) bei java.lang.Thread .run (Thread.java:745) Verursacht von: java.io.IOException: Programm "Rscript" kann nicht ausgeführt werden: Fehler = 2, Nein Datei oder Verzeichnis unter java.lang.ProcessBuilder.start (ProcessBuilder.java: 1048) unter org.apache.spark.api.r.RRunner $ .createRProcess (RRunner.scala: 348) um ​​ org.apache.spark.api.r.RRunner $ .createRWorker (RRunner.scala: 364) um org.apache.spark.api.r.RRunner.compute (RRunner.scala: 69) um org.apache.spark.api.r.BaseRRDD.berechnen (RRDD.scala: 49) zu org.apache.spark.rdd.RDD.computeOrReadCheckpoint (RDD.scala: 319) zu org.apache.spark.rdd.RDD.iterator (RDD.scala: 283) bis org.apache.spark.rdd.MapPartitionsRDD.compute (MapPartitionsRDD.scala: 38) zu org.apache.spark.rdd.RDD.computeOrReadCheckpoint (RDD.scala: 319) zu org.apache.spark.rdd.RDD. Iterator (RDD.scala: 283) zu org.apache.spark.rdd.MapPartitionsRDD.compute (MapPartitionsRDD.scala: 38) zu org.apache.spark.rdd.RDD.computeOrReadCheckpoint (RDD.scala: 319) zu org.apache.spark.rdd.RDD.iterator (RDD.scala: 283) zu org.apache.spark.rdd.MapPartitionsRDD.compute (MapPartitionsRDD.scala: 38) zu org.apache.spark.rdd.RDD. computeOrReadCheckpoint (RDD.scala: 319 ) org.apache.spark Traceback:

  1. Kopf (Carex)
  2. Kopf (Carex)
  3. .local (x, ...)
  4. Nehmen (x, num)
  5. Nehmen (x, num)
  6. Collect (begrenzt)
  7. Collect (begrenzt)
  8. .local (x, ...)
  9. callJStatic ("org.apache.spark.sql.api.r.SQLUtils", "dfToCols". x @ SDF)
  10. invokeJava (isStatic = TRUE, classname, method, ...)
  11. Anschlag (Readstring (Conn))

Antwort

0

Dieses sut es deall ist:

der Grund read.jdbc niedriger funktioniert, weil, auf dem Knoten, R untere Knoten benötigt, um die Operation auszuführen: der Fahrer (Wo R läuft) den Befehl Spark übersetzen Bevor es zu, kopiert wird und ausgeführt wird, auf dem Arbeitsknoten.

Der Grund createDataFrame nicht niedriger, weil Tätowierung zu den Arbeitern Knoten mp einen R Befehl kopiert wird, damit der Knoten Zugang oes angen Daches Rscript.

Os chi ydych defnyddio createDataFrame in welchem ​​sy'n mit Datenbit zu spielen, um Sie awgrymu verwenden ist eine lokale Sparksession (Fel chi OES auf Ihre Arbeiter Knoten Rscript zu kopieren). O chi angen Ihre Daten durch R passieren sie in Spark in erster Linie zu erhalten, können Sie ydych denken (du bist wahrscheinlich Spark weil chi oes Unmengen von Daten verwenden, und es ist in der Regel besser zu laden und alles in den Spark Seite und gerade ziehen, beispielsweise aggregierte Klumpen Dach R in-memory).