来自Rstudio的SparkR - 在invokeJava中给出错误(isStatic = TRUE,className,methodName,...):

时间:2016-08-10 01:47:59

标签: r apache-spark hiveql apache-spark-mllib sparkr

我正在使用RStudio。

创建会话后,如果我尝试使用R数据创建数据帧,则会出错。

Sys.setenv(SPARK_HOME = "E:/spark-2.0.0-bin-hadoop2.7/spark-2.0.0-bin-hadoop2.7")
Sys.setenv(HADOOP_HOME = "E:/winutils")
.libPaths(c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib"), .libPaths()))
Sys.setenv('SPARKR_SUBMIT_ARGS'='"sparkr-shell"')

library(SparkR)

sparkR.session(sparkConfig = list(spark.sql.warehouse.dir="C:/Temp"))

localDF <- data.frame(name=c("John", "Smith", "Sarah"), age=c(19, 23, 18))
df <- createDataFrame(localDF)

错误:

Error in invokeJava(isStatic = TRUE, className, methodName, ...) : 
  java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.apache.spark.sql.hive.client.IsolatedClientLoader.createClient(IsolatedClientLoader.scala:258)
    at org.apache.spark.sql.hive.HiveUtils$.newClientForMetadata(HiveUtils.scala:359)
    at org.apache.spark.sql.hive.HiveUtils$.newClientForMetadata(HiveUtils.scala:263)
    at org.apache.spark.sql.hive.HiveSharedState.metadataHive$lzycompute(HiveSharedState.scala:39)
    at org.apache.spark.sql.hive.HiveSharedState.metadataHive(HiveSharedState.scala:38)
    at org.apache.spark.sql.hive.HiveSharedState.externalCatalog$lzycompute(HiveSharedState.scala:46)
    at org.apache.spark.sql.hive.HiveSharedState.externalCatalog(HiveSharedState.scala:45)
    at org.a
>

TIA。

enter image description here

3 个答案:

答案 0 :(得分:5)

非常感谢你的帮助。

  1. 我必须做的是在PATH变量中设置hadoop_home路径 (winutils / bin)中。这应该有你的winutils.exe文件。所以当它 为hive默认德比创建Metastore)它可以调用hive 类。
  2. 此外,我将hive支持设为False,因为我没有使用它。
  3. Sys.setenv(SPARK_HOME='E:/spark-2.0.0-bin-hadoop2.7/spark-2.0.0-bin-hadoop2.7',HADOOP_HOME='E:/winutils')
    
    .libPaths(c(file.path(Sys.getenv('SPARK_HOME'), 'R', 'lib'),.libPaths()))
    
    Sys.setenv('SPARKR_SUBMIT_ARGS'='"sparkr-shell"')
    
    library(SparkR)
    library(rJava)
    
    sparkR.session(enableHiveSupport = FALSE,master = "local[*]", sparkConfig = list(spark.driver.memory = "1g",spark.sql.warehouse.dir="E:/winutils/bin/"))
    
    df <- as.DataFrame(iris)
    

答案 1 :(得分:1)

如果您还没有使用SparkR库但是您正在使用Spark, 我推荐由RStudio制作的'sparklyr'库。

  1. 安装RStudio的预览版。

  2. 安装库:

    install.packages("devtools")
    devtools::install_github('rstudio/sparklyr')
    
  3. 加载库并安装spark。

    library(sparklyr)
    spark_install('1.6.2')
    
  4. 您可以在http://spark.rstudio.com/

    中看到一个小插图

答案 2 :(得分:1)

这些是我在RStudio中所做的步骤,它对我有用:

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

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

localDF <- data.frame(name=c("John", "Smith", "Sarah"), age=c(19, 23, 18))
df <- createDataFrame(sqlContext, localDF)