【问题标题】:RJDBC Cassandra -> Error in .jfindClass(as.character(driverClass)[1]) : class not foundRJDBC Cassandra -> .jfindClass 中的错误(as.character(driverClass)[1]):找不到类
【发布时间】:2015-09-02 16:36:44
【问题描述】:

我正在尝试将 R 连接到 Cassandra,但出现以下错误 - 即使我在运行代码之前明确将此目录文件夹添加到类路径(并且我还指向语句中的类路径)?谢谢你的帮助!

要求(RJDBC)

.jaddClassPath("C:\\Users\\atrombley\\Desktop\\R\\")
cassdrv <- JDBC("org.apache.cassandra.cql.jdbc.CassandraDriver",
                "C:\\Users\\atrombley\\Desktop\\R\\cassandra-jdbc-1.2.5.jar")

.jfindClass(as.character(driverClass)[1]) 中的错误:找不到类

【问题讨论】:

    标签: java r


    【解决方案1】:

    在我的例子中,我在调用 JDBC() 时指定的位置缺少数据库驱动程序。只需将 Jar 添加到该位置即可!例如:

    JDBC(driverClass="com.vertica.jdbc.Driver", classPath="C:/Program Files/Vertica Systems/JDBC/vertica-jdbc-7.2.1-0.jar")
    

    这个有用的线索来自于打开调试:

    .jclassLoader()$setDebug(1L)
    

    这里建议:https://github.com/s-u/RJDBC/issues/26

    【讨论】:

      【解决方案2】:

      Cassandra JDBC 驱动程序 v1.2.5 不适用于 Cassandra 2.* 并且非常非常弃用,仍然使用 thrift API 并且仅连接到单个节点。

      您应该获取我制作的使用 Datastax Java 驱动程序的新版本:https://github.com/adejanovski/java-driver

      这是一个包含所有必要依赖项的已编译版本的链接:https://drive.google.com/file/d/0B7fwX0DqcWSTLUFqSEMxVFVWY2M/view?usp=sharing

      使用适当的驱动程序类和 JDBC url,如本页所示:https://github.com/adejanovski/java-driver/tree/2.1/driver-jdbc

      另一个更有效的选择(虽然我不熟悉 R)应该是在 Spark 上使用 R 并通过 Datastax 提供的 spark-cassandra 连接器访问 Cassandra。

      【讨论】:

      • 我将所有依赖项都放在文件夹中,并将脚本更新为您建议的(非常感谢您的帮助)cassdrv
      • 我仍然收到以下错误:.jcall(drv@jdrv, "Ljava/sql/Connection;", "connect", as.character(url)[1], : java .sql.SQLNonTransientConnectionException:com.datastax.driver.core.exceptions.NoHostAvailableException:所有主机尝试查询失败(尝试:/10.121.184.XX:9042(com.datastax.driver.core.ConnectionException:[/ 10.121.184.XX:9042] 传输初始化期间出现意外错误
      • 错误信息提示无法通过端口 9042 访问您的 Cassandra 服务器。您能否确认您可以使用 Datastax DevCenter 从同一台机器访问此服务器,该服务器也使用本机端口?
      • 我可以确认我可以使用该端口从 DevCenter 访问它(无法添加屏幕截图,否则我会告诉你)
      • 我可以从 cqlsh legal-mac01 的端口 9160 连接:~ atrombley$ cqlsh 10.121.184.15 9160 userXXXXX pwXXXX Connected to Test Cluster at 10.121.184.15:9160。 [cqlsh 4.1.1 |卡桑德拉 2.1.5.469 | CQL 规范 3.1.1 | Thrift 协议 19.39.0] 使用 HELP 寻求帮助。
      【解决方案3】:

      因此,那里的文档很糟糕,我发现您需要以下“依赖”jar,并且您需要将它们放在与驱动程序 jar 文件相同的文件夹中。

      罐子列表:

      apache-cassandra-thrift-1.2.6 cassandra-jdbc-2.1.1 log4j-1.2.15 slf4j-simple-1.5.2 libthrift-0.7.0 杰克逊核心asl-1.9.2 cassandra-all-1.2.9 slf4j-api-1.5.2 apache-cassandra-clientutil-1.2.6 杰克逊-映射器-asl-1.9.2 番石榴-15.0 slf4j-log4j12-1.5.2

      然而,即使你幸运地解决了这个问题并且 R 找到了你的驱动程序,你也会遇到问题并得到下面似乎没有人修复的错误......

      log4j:WARN 找不到记录器 (org.apache.cassandra.cql.jdbc.CassandraDriver) 的附加程序。 log4j:WARN 请正确初始化 log4j 系统。 .jcall(drv@jdrv, "Ljava/sql/Connection;", "connect", as.character(url)[1], 中的错误: java.sql.SQLNonTransientConnectionException: org.apache.thrift.transport.TTransportException: 读取负帧大小 (-2097152000)!

      【讨论】:

        【解决方案4】:

        请在 cassandra/lib 文件夹中添加 cassandra-jdbc-1.2.5-1.0.0.jar 文件。这对我有用。

        【讨论】:

          【解决方案5】:

          R 示例中没有一个对我有用,而且我已经读到,即使是对你有用的那些,你也必须建立分页,这对 a$$ 来说是一个痛苦。只需使用此脚本在 python 中执行此操作,它就会为您完成分页。

          import sys
          sys.path.append('/Library/Python/2.7/site-packages/')
          import cql
          from cassandra.cluster import Cluster
          cluster = Cluster(contact_points=['10.121.xxx.xx'], protocol_version=3);
          session = cluster.connect();
          result = session.execute("select client_id, request_time, request_id,client_ip, exception, method, query_parameters, request_body, resource,response_duration_in_ms, response_http_code, user_id from api.api_usage_log")
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-12-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多