如何使用 sparklyr 添加 jar?
How do I add a jar using sparklyr?
当我尝试使用 Rstudio 和 sparklyr 使用此代码访问 Hive table 时:
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 日志中看不到任何关于添加依赖项的信息。
这个问题不是一个闪闪发光的问题:它是 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路径后没有space)。
然而问题:
Error in library(JsonSerDe) : there is no package called ‘JsonSerDe’
仍然存在,我会接受对此的回答。
您可以使用 spark 配置提供 jar。下面为我们工作。
config[["sparklyr.jars.default"]] <- "/usr/lib/jars/json-serde-1.3.7-jar-with-dependencies.jar"
或
config[["sparklyr.jars.default"]] <- "hdfs://master.royble.co.uk:8020/jars/json-serde-1.3.7-jar-with-dependencies.jar
"
当我尝试使用 Rstudio 和 sparklyr 使用此代码访问 Hive table 时:
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 日志中看不到任何关于添加依赖项的信息。
这个问题不是一个闪闪发光的问题:它是 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路径后没有space)。 然而问题:
Error in library(JsonSerDe) : there is no package called ‘JsonSerDe’
仍然存在,我会接受对此的回答。
您可以使用 spark 配置提供 jar。下面为我们工作。
config[["sparklyr.jars.default"]] <- "/usr/lib/jars/json-serde-1.3.7-jar-with-dependencies.jar"
或
config[["sparklyr.jars.default"]] <- "hdfs://master.royble.co.uk:8020/jars/json-serde-1.3.7-jar-with-dependencies.jar
"