2015-07-03 11 views
6

Als eine neue Version von spark (1.4) veröffentlicht wurde, schien es eine schöne Frontend Interfeac zu spark von R Paket namens sparkR zu sein. Auf den documentation page of R for spark gibt es einen Befehl, die json Dateien als RDD-ObjekteWie liest man CSV in sparkR ver 1.4?

people <- read.df(sqlContext, "./examples/src/main/resources/people.json", "json") 

Ich versuche zu lesen, Daten aus einer .csv Datei lesen kann, wie es auf this revolutionanalitics' blog

# Download the nyc flights dataset as a CSV from https://s3-us-west-2.amazonaws.com/sparkr-data/nycflights13.csv 

# Launch SparkR using 
# ./bin/sparkR --packages com.databricks:spark-csv_2.10:1.0.3 

# The SparkSQL context should already be created for you as sqlContext 
sqlContext 
# Java ref type org.apache.spark.sql.SQLContext id 1 

# Load the flights CSV file using `read.df`. Note that we use the CSV reader Spark package here. 
flights <- read.df(sqlContext, "./nycflights13.csv", "com.databricks.spark.csv", header="true") 

Die Note beschrieben wird Ich brauche ein Spark-CSV-Paket, um diese Operation zu ermöglichen. Also habe ich heruntergeladen dieses Paket von dieser github repo mit diesem Befehl:

$ bin/spark-shell --packages com.databricks:spark-csv_2.10:1.0.3 

Aber dann traf ich einen solchen Fehler während eine .csv-Datei zu lesen versuchen.

> flights <- read.df(sqlContext, "./nycflights13.csv", "com.databricks.spark.csv", header="true") 
15/07/03 12:52:41 ERROR RBackendHandler: load on 1 failed 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.spark.api.r.RBackendHandler.handleMethodCall(RBackendHandler.scala:127) 
    at org.apache.spark.api.r.RBackendHandler.channelRead0(RBackendHandler.scala:74) 
    at org.apache.spark.api.r.RBackendHandler.channelRead0(RBackendHandler.scala:36) 
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) 
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) 
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) 
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) 
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) 
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) 
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:163) 
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) 
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) 
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:787) 
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:130) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382) 
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354) 
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) 
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.RuntimeException: Failed to load class for data source: com.databricks.spark.csv 
    at scala.sys.package$.error(package.scala:27) 
    at org.apache.spark.sql.sources.ResolvedDataSource$.lookupDataSource(ddl.scala:216) 
    at org.apache.spark.sql.sources.ResolvedDataSource$.apply(ddl.scala:229) 
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:114) 
    at org.apache.spark.sql.SQLContext.load(SQLContext.scala:1230) 
    ... 25 more 
Error: returnStatus == 0 is not TRUE 

Irgendeine Idee, was dieser Fehler bedeutet und wie man das löst?

Natürlich könnte ich versuchen .csv in üblicher Weise zu lesen wie:

read.table("data.csv") -> flights 

und dann kann ich umwandeln R data.frame in spark ‚s DataFrame wie folgt aus:

flightsDF <- createDataFrame(sqlContext, flights) 

Aber diese ist nicht so, wie ich es mag und es ist wirklich zeitaufwendig.

Antwort

13

Sie haben sparkR Konsole jedes Mal wie folgt zu starten:

sparkR --packages com.databricks:spark-csv_2.10:1.0.3 
5

Wenn Sie Rstudio verwenden:

library(SparkR) 
Sys.setenv('SPARKR_SUBMIT_ARGS'='"--packages" "com.databricks:spark-csv_2.10:1.0.3" "sparkr-shell"') 
sqlContext <- sparkRSQL.init(sc) 

funktioniert der Trick. Stellen Sie sicher, dass die für spark-csv angegebene Version mit der Version übereinstimmt, die Sie heruntergeladen haben.

+0

Wissen Sie, ob dies mit sparkJars Parameter an sparkR.init übergeben werden kann? –

-1

Vergewissern Sie sich, dass Sie sparkr aus Funken mit installieren:

install.packages("C:/spark/R/lib/sparkr.zip", repos = NULL) 

und nicht fro Github

, dass es für mich gelöst.

+0

Ich hatte eine korrekte Installation von Spark ver 1.4, konnte aber keine Funke-CSV-Daten laden, da zu dieser Zeit das zusätzliche Paket benötigt wurde. Die Lösung wurde hier vor einem Jahr geschrieben, also bitte nicht http://StackOverflow.com/a/31206855/3857701 spammen –