代码之家  ›  专栏  ›  技术社区  ›  schoon

如何使用SparkyR添加一个罐子?

  •  3
  • schoon  · 技术社区  · 7 年前

    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创建的。例如,当通过以下方式使用配置单元CLI时,它很容易修复:

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

    那么,我如何使用SparkyR实现等效的添加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)
    

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

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

    2 回复  |  直到 7 年前
        1
  •  3
  •   kartik    6 年前

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

        2
  •  1
  •   schoon    7 年前

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

    然而,问题:

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

    仍然存在,我会接受答案。