2017-07-26 64 views
2

當我嘗試訪問使用Rstudio和sparklyr使用此代碼蜂房表:如何使用sparklyr添加jar?

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’ 

我什麼也看不到星火日誌有關添加依賴。

+0

你有沒有您使用的R包稱爲'JsonSerDe'創建/?您可以添加罐通過配置選項sparklyr在'spark_connect',具體而言,列表名爲'sparklyr.jars.default'。 – russellpierce

回答

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’ 

仍然有效,我會接受的答案。

1

您可以使用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