RJDBCでJDK Library not loaded: /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/lib/server/libjvm.dylib Errorがでた際の備忘録


概要

  • Exploratory から、TreasureDataにアクセスする際に 以下のようなErrorが出た際とてもハマったので備忘録
  • RStudioからもできなかったのですが、こちらでRSudioからもできるようになりました。

環境情報

パッケージ名 バージョン
Java 10.0.2
R 3.5.0
RStudio 1.1.456
rJava(CRAN) 0.9-10
RJDBC(CRAN) 0.2-7.1
Exploratory 4.4.0.5

Error内容

Error: package or namespace load failed for 'rJava':
 .onLoad failed in loadNamespace() for 'rJava', details:
  call: dyn.load(file, DLLpath = DLLpath, ...)
  error: unable to load shared object '/Library/Frameworks/R.framework/Versions/3.5/Resources/library/rJava/libs/rJava.so':
  dlopen(/Library/Frameworks/R.framework/Versions/3.5/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/lib/server/libjvm.dylib
  Referenced from: /Library/Frameworks/R.framework/Versions/3.5/Resources/library/rJava/libs/rJava.so
  Reason: image not found

解決方法

sudo ln -s $(/usr/libexec/java_home)/lib/server/libjvm.dylib /usr/local/lib
R CMD javareconf -n # こちらは念の為実施

TreasureDataへのアクセスScript

こちらはTreasureDataさんのスクリプトから抜粋で動作しました。

library(RJDBC)
drv <- JDBC("com.treasuredata.jdbc.TreasureDataDriver",
            "/path/to/td-jdbc-<td-jdbc.version>-jar-with-dependencies.jar",
            identifier.quote="`")
conn <- dbConnect(drv,
                  "jdbc:td://api.treasuredata.com/testdb;type=presto;useSSL=true",
                  "YOUR_USER_NAME_HERE",
                  "YOUR_PASSWORD_HERE")
dbListTables(conn)
dbGetQuery(conn, "SELECT COUNT(1) AS cnt FROM www_access")

参考