我已经尝试了How to load csv file into SparkR on RStudio?中几个建议的几种排列方式,但我只能将Spark解决方案的内存用于工作:
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太大而无法放入内存,则会导致问题。 ( hack是加载一系列csv文件并在sparkR中绑定它们。)首选通过 read.df 读取CSV文件。
如果我将init更改为:
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缺少什么小精灵?
是否有更简单的方法来指定或确认正确的数据库设置 2.11:1.2.0 ?
有没有办法加载制表符分隔文件或其他不需要数据库的格式?
P.S。我注意到H2O与R结合起来更加愉快,并且不需要奥术咒语。 sparkR人真的需要将启动sparkR作为1个衬管恕我直言......
答案 0 :(得分: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 var,然后完成剩下的工作。 collect(df)
显示它有效。
答案 1 :(得分:0)