1

下面是我用來從apache spark java程序連接到oracle本地數據庫的代碼,但是我收到了以下錯誤消息。使用java將oracle數據庫連接到apache spark的錯誤

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

這是我的代碼。

​​

以下是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> 
+0

你可以在這裏放置堆棧跟蹤。 似乎有些類可能在運行時由您設置的類路徑中丟失。 –

+1

[解決ClassNotFoundException異常/對象x不是Apache Spark中包y的成員]的可能重複(http://stackoverflow.com/questions/41383460/resolving-classnotfoundexception-exceptions-object-x-is-not-a -member-of-packag) – user7337271

回答

0

你有星火SQL版本1.6和Spark核2.0

改變點火SQL版本也到2.0:

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

火花CSV也只爲星火1.x中,星火2在SQL項目中內置此功能

0

您應該在pom.xml中使用相同版本的spark庫。您在版本2.0.1中使用spark-corespark-mllib,而您的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> 

火花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); 
+0

我的速度快了30秒^^我的答案有Spark CSV的提示,你有關於SparkSession –