Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Netezza与Spark/Scala JDBC的连接_Scala_Apache Spark_Jdbc_Netezza - Fatal编程技术网

Netezza与Spark/Scala JDBC的连接

Netezza与Spark/Scala JDBC的连接,scala,apache-spark,jdbc,netezza,Scala,Apache Spark,Jdbc,Netezza,我已经在Windows机器上使用IntelliJ IDE上的Scala 2.11.8设置了Spark 2.2.0。我正在尝试使用JDBC驱动程序使Spark连接到Netezza 我已经通读并通过Maven将com.ibm.spark.netezzajar添加到我的项目中。我尝试运行下面的Scala脚本来测试连接: package jdbc object SimpleScalaSpark { def main(args: Array[String]) { import org.apac

我已经在Windows机器上使用IntelliJ IDE上的Scala 2.11.8设置了Spark 2.2.0。我正在尝试使用JDBC驱动程序使Spark连接到Netezza

我已经通读并通过Maven将
com.ibm.spark.netezza
jar添加到我的项目中。我尝试运行下面的Scala脚本来测试连接:

package jdbc
object SimpleScalaSpark {
  def main(args: Array[String]) {
    import org.apache.spark.sql.{SparkSession, SQLContext}
    import com.ibm.spark.netezza

    val spark = SparkSession.builder
      .master("local")
      .appName("SimpleScalaSpark")
      .getOrCreate()

    val sqlContext = SparkSession.builder()
      .appName("SimpleScalaSpark")
      .master("local")
      .getOrCreate()

val nzoptions = Map("url" -> "jdbc:netezza://SERVER:5480/DATABASE",
  "user" -> "USER",
  "password" -> "PASSWORD",
  "dbtable" -> "ADMIN.TABLENAME")

val df = sqlContext.read.format("com.ibm.spark.netezza").options(nzoptions).load()
  }
}
但是,我得到以下错误:

17/07/27 16:28:17 ERROR NetezzaJdbcUtils$: Couldn't find class org.netezza.Driver
java.lang.ClassNotFoundException: org.netezza.Driver
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.apache.spark.sql.execution.datasources.jdbc.DriverRegistry$.register(DriverRegistry.scala:38)
    at com.ibm.spark.netezza.NetezzaJdbcUtils$$anonfun$getConnector$1.apply(NetezzaJdbcUtils.scala:49)
    at com.ibm.spark.netezza.NetezzaJdbcUtils$$anonfun$getConnector$1.apply(NetezzaJdbcUtils.scala:46)
    at com.ibm.spark.netezza.DefaultSource.createRelation(DefaultSource.scala:50)
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:306)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:178)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:146)
    at jdbc.SimpleScalaSpark$.main(SimpleScalaSpark.scala:20)
    at jdbc.SimpleScalaSpark.main(SimpleScalaSpark.scala)
Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:netezza://SERVER:5480/DATABASE
    at java.sql.DriverManager.getConnection(DriverManager.java:689)
    at java.sql.DriverManager.getConnection(DriverManager.java:208)
    at com.ibm.spark.netezza.NetezzaJdbcUtils$$anonfun$getConnector$1.apply(NetezzaJdbcUtils.scala:54)
    at com.ibm.spark.netezza.NetezzaJdbcUtils$$anonfun$getConnector$1.apply(NetezzaJdbcUtils.scala:46)
    at com.ibm.spark.netezza.DefaultSource.createRelation(DefaultSource.scala:50)
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:306)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:178)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:146)
    at jdbc.SimpleScalaSpark$.main(SimpleScalaSpark.scala:20)
    at jdbc.SimpleScalaSpark.main(SimpleScalaSpark.scala)
我有两个想法:

1) 我不相信我真的安装了任何Netezza JDBC驱动程序,尽管我认为从上面的链接带到我的项目中的JAR已经足够了。我只是缺少一个驱动程序,还是Scala脚本中缺少了什么

2) 在同一链接中,作者提到启动Netezza Spark软件包:

例如,将Spark Netezza软件包与Spark的interactive shell,按如下所示启动它:

$SPARK_HOME/bin/SPARK shell–套装 SparkTC:spark-netezza_2.10:0.1.1 –驱动程序类路径~/nzjdbc.jar

我不相信我在脚本中调用的是除
jdbc
之外的任何包。我必须把它添加到我的脚本中吗


谢谢

我认为你的第一个想法是对的。如果尚未安装Netezza JDBC驱动程序,则几乎肯定需要安装该驱动程序

从您发布的链接:

此包可以作为应用程序的一部分部署,也可以从 Spark工具,如Spark shell、Spark sql。要在中使用包,请执行以下操作: 应用程序,您必须在应用程序的构建中指定它 附属国。使用Spark tools时,请使用 –包命令行选项。Netezza JDBC驱动程序也应该是 添加到应用程序依赖项


Netezza驱动程序是您必须自己下载的,您需要获得支持权限才能访问它(通过IBM的Fix Central或Passport Advantage)。它包含在Windows驱动程序/客户端支持包或linux驱动程序包中。

我认为您的第一个想法是正确的。如果尚未安装Netezza JDBC驱动程序,则几乎肯定需要安装该驱动程序

从您发布的链接:

此包可以作为应用程序的一部分部署,也可以从 Spark工具,如Spark shell、Spark sql。要在中使用包,请执行以下操作: 应用程序,您必须在应用程序的构建中指定它 附属国。使用Spark tools时,请使用 –包命令行选项。Netezza JDBC驱动程序也应该是 添加到应用程序依赖项


Netezza驱动程序是您必须自己下载的,您需要获得支持权限才能访问它(通过IBM的Fix Central或Passport Advantage)。它包含在Windows驱动程序/客户端支持包或linux驱动程序包中。

什么是spark submit命令?请注意,它需要
--jars
--driver class path
来加载您的JDBC驱动程序。@Philantrover我相信我在运行Scala脚本时设置了IntelliJ来启动Spark,但不确定Spark submit命令默认以什么开始。不管怎样,你是说我的spark submit命令应该更新为包含上面(2)中的--packages和--driver类路径吗?在执行脚本之前,我也尝试过在命令行中运行它,但不幸的是,仍然出现了相同的错误:spark shell——packages com.ibm.SparkTC:spark-netezza_2.10:0.1.1——驱动程序类path/path/to/nzjdbc.jar您的spark提交命令是什么?请注意,它需要
--jars
--driver class path
来加载您的JDBC驱动程序。@Philantrover我相信我在运行Scala脚本时设置了IntelliJ来启动Spark,但不确定Spark submit命令默认以什么开始。不管怎样,你是说我的spark submit命令应该更新为包含上面(2)中的--packages和--driver类路径吗?在执行脚本之前,我也尝试过在命令行中运行它,但不幸的是,仍然出现了同样的错误:spark shell——packages com.ibm.SparkTC:spark-netezza_2.10:0.1.1——驱动程序类path/path/to/nzjdbc.jar。一旦我安装了正确的netezza JDBC驱动程序,我就简单地将IntelliJ指向了项目结构依赖项中的nzjdbc.jar文件,它工作起来很有魅力。谢谢确认,一旦我安装了正确的Netezza JDBC驱动程序,我就简单地将IntelliJ指向项目结构依赖项中的nzjdbc.jar文件,它工作得很好。谢谢