user1700890
user1700890

Reputation: 7730

rJava and RJDBC on Databricks

I am trying to install rJava and RJDBC on Databricks (from notebook).

I ran recommended lines:

%sh
ls -l /usr/bin/java
ls -l /etc/alternatives/java
ln -s /usr/lib/jvm/java-8-openjdk-amd64 /usr/lib/jvm/default-java
R CMD javareconf

Installation went fine, but when I try

library(rJava)

I get this 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 '/local_disk0/.ephemeral_nfs/envs/rEnv-83cc4969-e3a2-430d-83c5-b43067bdea17/rJava/libs/rJava.so':
  libjvm.so: cannot open shared object file: No such file or directory
Error: package or namespace load failed for ‘rJava’:
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 '/local_disk0/.ephemeral_nfs/envs/rEnv-83cc4969-e3a2-430d-83c5-b43067bdea17/rJava/libs/rJava.so':
  libjvm.so: cannot open shared object file: No such file or directory

What do I do in this case?

UPDATE

Following the link rJava prerequisites after installing rJava and RJDBC I ran

dyn.load('/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so')
library(rJava)

and got the following output:

Error in dyn.load("/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so") : 
  unable to load shared object '/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so':
  /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so: cannot open shared object file: No such file or directory
Error in dyn.load("/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so"): unable to load shared object '/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so':
Error in dyn.load("/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so"): unable to load shared object '/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so':
  /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so: cannot open shared object file: No such file or directory

Another update

The following line is not just necessary to verify installation, it is a part of installation and it is possible that path is different. Here is pass that worked for me:

dyn.load('/usr/lib/jvm/zulu11-ca-amd64/lib/server/libjvm.so')

And here is some philosophy behind it.

"rJava uses JNI to hook into the JVM. For JNI to work, it needs access to the shared library. dyn.load is a r function that helps loads native shared object libraries (libjvm.so) into the namespace so any functions that need to call into java can be executed"

Upvotes: 1

Views: 250

Answers (0)

Related Questions