从 R 连接到亚马逊红移时出错 - Windows 10

Posted

技术标签:

【中文标题】从 R 连接到亚马逊红移时出错 - Windows 10【英文标题】:Error connecting to amazon redshift from R - windows 10 【发布时间】:2016-04-05 15:24:49 【问题描述】:

使用 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 

如果您对可以提供帮助的东西有任何想法,那就太棒了!谢谢

【问题讨论】:

【参考方案1】:

完全相同的问题影响了我。出于某种原因,download.file() 抓取了一个损坏的 .jar。我们小组的开发人员发现了以下修复:

    省略:

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

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

    将 .jar 复制到您的工作目录。

    运行剩余的代码。

【讨论】:

完全相同的问题!我使用了downloader 包中的download 函数来解决这个问题。 这就是答案。其他答案不能解决问题。关于 download.file 的某些内容正在破坏 .jar 文件。 Amazon's official tutorial 使用download.file()。这个答案确实是唯一解决它的问题。 @giraffehere 是对的。亚马逊:开始教程的糟糕方式。 希望更多人对此表示赞同,因为接受的答案会引导人们远离专用包。此外,由于另一个下载包有效,我很确定它不在亚马逊的法庭上,问题在于 R 的 download.file() 命令。【参考方案2】:

我给你的建议是将 redshift 与 RPostgreSQL 包连接起来。

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")

【讨论】:

谢谢。实际上我就是这样做的,而且效果很好!【参考方案3】:

嗨,我指的是你的代码

install.packages("rJava") install.packages("RJDBC") 库(rJava) 库(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')

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

希望对你有帮助

【讨论】:

以上是关于从 R 连接到亚马逊红移时出错 - Windows 10的主要内容,如果未能解决你的问题,请参考以下文章

无法从火花连接到红移

亚马逊红移,sqlworkbench/j

将镶木地板文件加载到红移时如何格式化时间戳字段?

putty 链接亚马逊服务器

使用 R 进行红移

使用 docker、rbase 和 RODBC 连接到 sql server 时出错