2016-06-09 66 views
1
分崩離析

我試過的建議數排列在How to load csv file into SparkR on RStudio?,但我只能夠得到inmemory星火解決工作:火花CSV與SparkR&RStudio

Sys.setenv(SPARK_HOME='C:/Users/myuser/apache/spark-1.6.1-bin-hadoop2.6') 
.libPaths(c(file.path(Sys.getenv("SPARK_HOME"),"R","lib"),.libPaths())) 

library(SparkR) 
sparkR.stop() 
sc=sparkR.init(master="local") 
sqlContext=sparkRSQL.init(sc) 

df=read.csv(file="C:/.../file.csv",  
      header=T,sep=",",na.strings = c('NULL',''),fileEncoding = "UTF-8-BOM",stringsAsFactors = F) 

df<- createDataFrame(sqlContext, df) 
df=dropna(df) 
names(df) 
summary(df) 

以上的擦如果file.csv太大而不適合內存,則會導致問題。 (一個黑客就是加載一系列csv文件並將它們放入sparkR)通過read.df來讀取CSV文件是首選。

如果我改變初始化爲:

sc <- sparkR.init(master='local', sparkPackages="com.databricks:spark-csv_2.11:1.2.0") 

在命令提示符後使用read.df,無論我做什麼sparkR現在大清洗。

df <- read.df(sqlContext, "C:/file.csv",   source="com.databricks.spark.csv", header="true", inferSchema="true") 

甚至

df<- createDataFrame(sqlContext, df) 

Pukes:

Error in invokeJava(isStatic = FALSE, objId$id, methodName, ...) : 
    org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 1.0 failed 1 times, most recent failure: Lost task 0.0 in stage 1.0 (TID 1, localhost): java.lang.NullPointerException 
    at java.lang.ProcessBuilder.start(Unknown Source) 
    at org.apache.hadoop.util.Shell.runCommand(Shell.java:482) 
    at org.apache.hadoop.util.Shell.run(Shell.java:455) 
    at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:715) 
    at org.apache.hadoop.fs.FileUtil.chmod(FileUtil.java:873) 
    at org.apache.hadoop.fs.FileUtil.chmod(FileUtil.java:853) 
    at org.apache.spark.util.Utils$.fetchFile(Utils.scala:406) 
    at org.apache.spark.executor.Executor$$anonfun$org$apache$spark$executor$Executor$$updateDependencies$5.apply(Executor.scala:405) 
    at org.apache.spark.executor.Executor$$anonfun$org$apache$spark$executor$Executor$$updateDependencies$5.apply(Executor.scala:397) 
    at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:7 

什麼是失蹤精靈,塵封SparkR?

是否有simplier方式來指定或確認正確的databricks設置2.11:1.2.0

有沒有辦法加載製表符分隔的文件或其他不需要數據存儲的其他格式?

P.S.我已經注意到H2O與R集成更加愉快,並且不需要奧術咒語。該sparkR人們真的需要作出啓動sparkR 1個襯墊恕我直言...

回答

2

下完美的​​作品對我來說:

Sys.setenv(SPARKR_SUBMIT_ARGS='"--packages" "com.databricks:spark-csv_2.11:1.4.0" "sparkr-shell"') 
Sys.setenv(SPARK_HOME='/path/to/spark') 
.libPaths(c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib"), .libPaths())) 

library(SparkR) 

sparkR.stop() 

sc <- sparkR.init(master="local") 
sqlContext <- sparkRSQL.init(sc) 

df <- read.df(sqlContext, 
       "/path/to/mtcars.csv", 
       source="com.databricks.spark.csv", 
       inferSchema="true") 

我把spark-csv_2.11-1.4.0.jar(最新JAR)到spark/jars目錄,修改了ENV其他適當的做了。 collect(df)顯示它的工作原理。

+0

當你說'適當地修改了env var'時,你的意思是通過上面的R代碼,還是我想在那裏設置一個必須設置的Windows環境var? – Chris

+1

上面的代碼。唯一的「外部」mod確保spark二進制目錄(bin&sbin)的路徑在我的'PATH'中。這應該不會影響上述。 – hrbrmstr

+0

我會試試看... – Chris

0

預構建的Spark 1.x發行版使用Scala 2.10而不是2.11構建。所以,如果你使用這樣的發行版(看起來你是這樣做的),你還需要一個適用於Scala 2.10的spark-csv版本,而不是Scala 2.11(就像你在代碼中使用的版本)。將spark-csv_2.11更改爲spark-csv_2.10,它應該可以正常工作(另請參閱SO答案herehere)。