【问题标题】:Error in connecting oracle database to apache spark using java使用java将oracle数据库连接到apache spark时出错
【发布时间】:2017-01-12 11:04:21
【问题描述】:

下面是我用来从 apache spark java 程序连接到 oracle 本地数据库的代码,但是我遇到了以下错误。

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/Logging
at java.lang.ClassLoader.defineClass1(Native Method).

这是我的代码。

public static void main( String[] args ) {
  JavaSparkContext sc = new JavaSparkContext(new SparkConf().setAppName("SparkJdbcDs").setMaster("local[*]"));
  SQLContext sqlContext = new SQLContext(sc);
  Map<String, String> options = new HashMap<String, String>();
  options.put("url", "jdbc:oracle:thin:@//192.168.2.85:1521/stage");
  options.put("dbtable", "AD_TABLES.brands");
  DataFrame jdbcDF = sqlContext.read().format("jdbc").options(options).load();
}

下面是 POM 文件。

<dependency>
  <groupId>com.databricks</groupId>
  <artifactId>spark-csv_2.11</artifactId>
  <version>1.5.0</version>
</dependency>
<dependency>
  <groupId>com.univocity</groupId>
  <artifactId>univocity-parsers</artifactId>
  <version>2.3.0</version>
</dependency>
<dependency>
  <groupId>org.apache.spark</groupId>
  <artifactId>spark-mllib_2.11</artifactId>
  <version>2.0.1</version>
</dependency>
<dependency> 
  <groupId>org.apache.spark</groupId>
  <artifactId>spark-core_2.11</artifactId>
  <version>2.0.1</version>
 </dependency>
 <dependency>
  <groupId>org.apache.spark</groupId>
  <artifactId>spark-sql_2.11</artifactId>
  <version>1.6.1</version>
 </dependency>
 <dependency>
  <groupId>com.oracle</groupId>
  <artifactId>ojdbc6</artifactId>
  <version>11.2.0.3</version>
 </dependency>

【问题讨论】:

标签: java apache-spark apache-spark-sql apache-spark-mllib apache-spark-dataset


【解决方案1】:

您拥有 Spark SQL 1.6 版和 Spark Core 2.0

将 Spark SQL 版本也更改为 2.0:

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.11</artifactId>
    <version>2.0.1</version>
</dependency>

Spark-CSV 也仅适用于 Spark 1.x,Spark 2 在 SQL 项目中内置了此功能

【讨论】:

    【解决方案2】:

    您应该在 pom.xml 中使用相同版本的 spark 库。您使用的是 spark-corespark-mllib 版本为 2.0.1,而您的 spark-sql 版本为 1.6.1。将其更改为 2.0.1,如下所示。

     <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>2.0.1</version>
     </dependency>
    

    使用 Spark 2.0,您无需创建单独的 sqlContext,因为您可以使用 SparkSession,如下所示。

    SparkSession spark = SparkSession
      .builder()
      .appName("JDBCSample")
      .master("local[2]")
      .getOrCreate(); 
    

    现在您可以使用 SparkSession 从数据库中读取数据,如下所示。更多详情请查看here

    Properties connectionProperties = new Properties();
    connectionProperties.put("user", "username");
    connectionProperties.put("password", "password");
    Dataset<Row> jdbcDF2 = spark.read().jdbc("jdbc:postgresql:dbserver", "schema.tablename", connectionProperties);
    

    【讨论】:

    • 我快了 30 秒 ^^ 我的答案暗示了 Spark CSV,你的答案暗示了 SparkSession
    猜你喜欢
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 2011-12-27
    • 2015-12-16
    相关资源
    最近更新 更多