如何使用sparklyr添加jar?

时间:2017-07-26 06:12:42

标签: sparklyr

当我尝试使用Rstudio和sparklyr使用此代码访问Hive表时:

library(sparklyr)
library(dplyr)
Sys.setenv(SPARK_HOME="/usr/hdp/current/spark2-client") # got from ambari spark2 configs
sc <- spark_connect(master = "yarn-client", config = config, version = '2.1.0')

library(DBI)
tabTweets <- dbGetQuery(sc, "SELECT * FROM tweets0 LIMIT 10")

我收到此错误:

Error in value[[3L]](cond) : 
  Failed to fetch data: java.lang.RuntimeException: java.lang.ClassNotFoundException: org.openx.data.jsonserde.JsonSerDe

这是因为tweets0是使用JsonSerDe创建的。例如,当遇到使用Hive CLI时,它很容易修复:

Add jar /usr/hdp/2.4.2.0-258/hive/lib/json-serde-1.3.7-jar-with-dependencies.jar;

那么如何使用sparklyr做一个等效的添加jar?

编辑: 我试过这个:

spark_dependencies <- function(spark_version, scala_version, ...) {
  sparklyr::spark_dependency(
    jars = c(
      system.file(
        sprintf("/usr/hdp/2.4.2.0-258/hive/lib/json-serde-1.3.7-jar-with-dependencies.jar"),
    package = "JsonSerDe"
      )
    )
  )
}
.onLoad <- function(libname, pkgname) {
  sparklyr::register_extension(pkgname)
}

library(JsonSerDe)

但仍然是相同的错误和库(JsonSerDe)给出:

Error in library(JsonSerDe) : there is no package called ‘JsonSerDe’

我在Spark日志中没有看到添加依赖项的内容。

2 个答案:

答案 0 :(得分:2)

您可以使用spark配置提供jar。以下为我们工作。

config[["sparklyr.jars.default"]] <- "/usr/lib/jars/json-serde-1.3.7-jar-with-dependencies.jar"

OR

config[["sparklyr.jars.default"]] <- "hdfs://master.royble.co.uk:8020/jars/json-serde-1.3.7-jar-with-dependencies.jar&#34;

答案 1 :(得分:1)

问题不是一个闪闪发光的问题:它是tez.lib.uris中的一个环境。将其更改为:

/hdp/apps/${hdp.version}/tez/tez.tar.gz,hdfs://master.royble.co.uk:8020/jars/json-serde-1.3.7-jar-with-dependencies.jar

(注意:逗号和hdfs路径后没有空格)。 但问题是:

Error in library(JsonSerDe) : there is no package called ‘JsonSerDe’

仍然有效,我会接受答案。