无法从 Windows 10 中的 R 连接到 Amazon Redshift 的错误

4
当我使用JDBC函数将R连接到Amazon Redshift时(我正在使用Windows 10),我遇到了以下错误:
Error in .jfindClass(as.character(driverClass)[1]) : class not found

我正在运行的代码是:
install.packages("rJava")
install.packages("RJDBC")
library(rJava)
library(RJDBC)

download.file('http://s3.amazonaws.com/redshift-downloads/drivers/RedshiftJDBC41-1.1.13.1013.jar','RedshiftJDBC41-1.1.13.1013.jar')
driver <- JDBC("com.amazon.redshift.jdbc41.Driver", "RedshiftJDBC41-1.1.13.1013.jar", identifier.quote = "`")

为了获取更多有关错误的信息,我运行了以下命令:

要获取更多信息,请参考以下内容:

 .jclassLoader()$setDebug(1L)

完整的错误跟踪如下:

RJavaClassLoader: added 'RedshiftJDBC41-1.1.13.1013.jar' to the URL class path loader
RJavaClassLoader: adding Java archive file 'RedshiftJDBC41-1.1.13.1013.jar' to the internal class path
RJavaClassLoader: added 'C:/Users/user/Documents/R/win-library/3.2/RJDBC/java/RJDBC.jar' to the URL class path loader
RJavaClassLoader: adding Java archive file 'C:/Users/user/Documents/R/win-library/3.2/RJDBC/java/RJDBC.jar' to the internal class path
RJavaClassLoader@33909752.findClass(com.amazon.redshift.jdbc41.Driver)
 - URL loader did not find it: java.lang.ClassNotFoundException: com.amazon.redshift.jdbc41.Driver
RJavaClassLoader.findClass("com.amazon.redshift.jdbc41.Driver")
 - trying class path "C:\Users\user\Documents\R\win-library\3.2\rJava\java"
 Directory, can get 'C:\Users\user\Documents\R\win-library\3.2\rJava\java\com\amazon\redshift\jdbc41\Driver.class'? NO
 - trying class path "C:\Users\user\Documents\R\win-library\3.2\RJDBC\java\RJDBC.jar"
JAR file, can get 'com/amazon/redshift/jdbc41/Driver'? NO
- trying class path "C:\Users\user\Desktop\Pricing"
   Directory, can get 'C:\Users\user\Desktop\Pricing\com\amazon\redshift\jdbc41\Driver.class'? NO
- trying class path "C:\Users\user\Desktop\Pricing\RedshiftJDBC41-1.1.9.1009.jar"
JAR file, can get 'com/amazon/redshift/jdbc41/Driver'? NO
- trying class path "RedshiftJDBC41-1.1.9.1009.jar"
JAR file, can get 'com/amazon/redshift/jdbc41/Driver'? NO
- trying class path "." Directory, can get '.\com\amazon\redshift\jdbc41\Driver.class'? NO
- trying class path "C:\RedshiftJDBC41-1.1.9.1009.jar"
JAR file, can get 'com/amazon/redshift/jdbc41/Driver'? NO
- trying class path "RedshiftJDBC41-1.1.13.1013.jar"
JAR file, can get 'com/amazon/redshift/jdbc41/Driver'? NO
>> ClassNotFoundException 

如果您有任何能帮助的想法,那太棒了!谢谢。

3个回答

6
同样的问题也困扰了我。由于某种原因,download.file() 下载的 .jar 文件损坏了。我们小组中的开发者找到了以下解决方法:
  1. 去掉以下代码:

    download.file('http://s3.amazonaws.com/redshift-downloads/drivers/RedshiftJDBC41-1.1.13.1013.jar','RedshiftJDBC41-1.1.13.1013.jar')

  2. 直接从 http://docs.aws.amazon.com/redshift/latest/mgmt/configure-jdbc-connection.html下载 .jar文件。

  3. 将 .jar 文件复制到你的工作目录。

  4. 运行其余代码。


请注意,此翻译仅供参考,具体语言表达可能因上下文略有变化。

2
完全相同的问题!我使用了downloader包中的download函数来解决这个问题。 - discipulus
2
这就是答案。其他答案都没有解决问题。似乎 download.file 的某些内容正在损坏 .jar 文件。 - giraffehere
亚马逊的官方教程使用了 download.file()。这个回答真的是唯一解决问题的方法。@giraffehere 是对的。亚马逊:这是一个糟糕的教程入门方式。 - Jarad
希望更多人能够点赞此答案,因为接受的答案将人们引导到一个专用的软件包之外。另外,由于另一个下载软件包可以正常工作,我相信这不是亚马逊的问题,而是与 R 的 download.file() 命令有关。 - AChervony

2
我推荐你使用RPostgreSQL包连接Redshift数据库。
install.packages("RPostgreSQL")
library(RPostgreSQL)
drv <- dbDriver("PostgreSQL")
conn <-dbConnect(drv,host='host link',port='5439',dbname='dbname',user='xxx',password='yyy')
dbSendQuery(conn,"insert your query")

谢谢。实际上这就是我做的方式,而且它有效! - Viola

1

嗨,我在参考你的代码片段

install.packages("rJava") install.packages("RJDBC") library(rJava) library(RJDBC)

download.file('http://s3.amazonaws.com/redshift-downloads/drivers/RedshiftJDBC41-1.1.13.1013.jar','RedshiftJDBC41-1.1.13.1013.jar') driver <- JDBC("com.amazon.redshift.jdbc41.Driver", "RedshiftJDBC41-1.1.13.1013.jar", identifier.quote = "`")

在编写驱动程序对象的位置,语法如下:

driver <- JDBC("CLASSNAME","PATH WHERE REDSHIFT JAR FILE IS DOWNLOADED')

我曾经遇到同样的错误,一旦意识到我只需要放置正确的路径,我就可以连接。 我的第二个参数是'C:\Users\person.name\Downloads\RedshiftJDBC41-1.1.13.1013.jar'

希望这能有所帮助


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接