我正在尝试使用Zeppelin笔记本中的Spark将数据从SQL Server提取到Hive表中。
我正在尝试运行以下代码:
%pyspark
from pyspark import SparkContext
from pyspark.sql import SparkSession
from pyspark.sql.dataframe import DataFrame
from pyspark.sql.functions import *
spark = SparkSession.builder \
.appName('sample') \
.getOrCreate()
#set url, table, etc.
df = spark.read.format('jdbc') \
.option('url', url) \
.option('driver', 'com.microsoft.sqlserver.jdbc.SQLServerDriver') \
.option('dbtable', table) \
.option('user', user) \
.option('password', password) \
.load()
但是,我不断收到异常:
...
Py4JJavaError: An error occurred while calling o81.load.
: java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
...
我整天都在试图解决这个问题,我认为我尝试设置驱动程序的方式有问题。我在该实例的/tmp/sqljdbc42.jar
下有一个驱动程序。您能否解释一下如何让Spark知道该驱动程序在哪里?我已经通过外壳和解释器编辑器尝试了许多不同的方式。
谢谢!
编辑
我还应注意,我是使用Zeppelin的外壳(%sh)将罐子加载到我的实例中的,
curl -o /tmp/sqljdbc42.jar http://central.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/6.4.0.jre8/mssql-jdbc-6.4.0.jre8.jar
pyspark --driver-class-path /tmp/sqljdbc42.jar --jars /tmp/sqljdbc42.jar
答案 0 :(得分:0)
您可以通过“翻译”设置中的Web UI将其添加,如下所示:
点击菜单中的解释器
在Spark解释器中单击“编辑”按钮
在工件字段中添加jar的路径
然后保存并重新启动解释器。
答案 1 :(得分:0)
这是我解决此问题的方法:
scp
驱动程序jar到群集驱动程序节点上
转到Zeppelin解释器并滚动到Spark部分,然后单击“编辑”。
在工件等处将罐子的完整路径写入/home/Hadoop/mssql-jdbc.jar
,别无其他。
单击“保存”。
那你应该很好!
答案 2 :(得分:0)
类似于Tomas,您可以在解释器中使用maven添加驱动程序(或任何库):
例如,在您的情况下,可以在工件字段中使用com.microsoft.sqlserver:mssql-jdbc:jar:8.4.1.jre8
。
重新启动解释器时,它将为您下载并添加依赖项。