我想在Spark中使用JDBC從MS SQL表(在Azure中)中讀取並將其保存爲實例文件(本地或S3)。我在本地工作,但當Spark在EC2上時我無法工作。在啓動時向PySpark添加JDBC驅動程序而不使用配置文件
我的本地版本的作品,因爲我手動打開我的火花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>;
因爲它可以正確地顯示我假設它是因爲jar被添加到主節點,但可能錯誤的來源是它沒有被推送到工作節點?我搜查了一噸,找不到任何東西。
在此先感謝。
你可以試試:my_jdbc_test.write.save(「my_jdbc_test.parquet」,format =「parquet」)? –