下面是我用来从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>
答案 0 :(得分:0)
您拥有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项目中构建的此功能
答案 1 :(得分:0)
您应该在pom.xml中使用相同版本的spark库。您使用spark-core
和spark-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);