我正在尝试使用Spark中的JDBC从MS SQL表(在Azure中)中读取并将其另存为镶木地板文件(本地或S3)。我在本地工作但是当Spark在EC2上时我无法工作。
我的本地版本有效,因为我手动打开了我的spark-defaults.conf文件并添加了这个**:
spark.driver.extraClassPath /Users/<my_user>/spark-1.6.1-bin-hadoop2.4/lib/postgresql-9.4.1208.jre6.jar:/Users/<my_user>/spark-1.6.1-bin-hadoop2.4/lib/sqljdbc4.jar
**我只需要mssql用于此特定用例
使用EC2我尝试了以下操作:
wget https://download.microsoft.com/download/0/2/A/02AAE597-3865-456C-AE7F-613F99F850A8/sqljdbc_6.0.7130.100_enu.tar.gz
tar -xf sqljdbc_6.0.7130.100_enu.tar.gz
ls
./spark/bin/pyspark --packages com.databricks:spark-csv_2.11:1.2.0 --driver-class-path "/root/sqljdbc_6.0/enu/sqljdbc4.jar"
然后在Python中我这样做:
sqlserver_user = <my_sql_user>
sqlserver_pw = <my_sql_pw>
sqlserver_<my_database>_url = "jdbc:sqlserver://<my_server>.cloudapp.net:<port_num>;DatabaseName=<my_db>;user=<my_user>;password=<my_password>;"
my_jdbc_test = sqlContext.load(
source="jdbc",
url=sqlserver_<my_database>_url,
dbtable=<my_table>
)
my_jdbc_test.printSchema()
my_jdbc_test.printSchema()
正确显示架构:
>>> my_jdbc_test.printSchema()
root
|-- my_var1: string (nullable = true)
|-- my_var2: string (nullable = true)
|-- my_var3: string (nullable = false)
>>>
然而,当我尝试将其作为镶木地板文件保存到我的本地磁盘时,我收到驱动程序错误:
my_jdbc_test.write.save("my_jdbc_test", format="parquet")
No suitable driver found for jdbc:sqlserver://<my_server>.cloudapp.net:<port_num>;DatabaseName=<my_db>;user=<my_user>;password=<my_password>;
由于它正确地显示了模式,我假设它已经被添加到主服务器中但是错误的来源可能是它没有被推送到工作节点?我搜了一下,找不到任何东西。
提前致谢。