Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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
Python 在启动时不使用配置文件向PySpark添加JDBC驱动程序_Python_Sql Server_Azure_Amazon Ec2_Pyspark - Fatal编程技术网

Python 在启动时不使用配置文件向PySpark添加JDBC驱动程序

Python 在启动时不使用配置文件向PySpark添加JDBC驱动程序,python,sql-server,azure,amazon-ec2,pyspark,Python,Sql Server,Azure,Amazon Ec2,Pyspark,我正在尝试使用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:/Use

我正在尝试使用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
然后从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.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>;
my\u jdbc\u test.write.save(“my\u jdbc\u test”,format=“parquet”)
未找到适合jdbc的驱动程序:sqlserver://.cloudapp.net:;数据库名=;用户=;密码=;
因为它正确地显示了模式,所以我假设这是因为jar被添加到了主节点,但错误的根源可能是它没有被推送到工作节点?我找了很多东西,什么也没找到


提前谢谢

根据问题信息,它是由SQL数据库驱动程序和连接字符串引起的。jdbc驱动程序和连接字符串用于Java,而不是Python

因此,您需要使用Python的odbc驱动程序和连接字符串,请尝试安装Python包
pymssql
,通过参考文档访问SQL数据库

ODBC与Python的连接字符串如下所示

Driver={SQLServer本机客户端10.0};服务器=tcp:。数据库.windows.net,1433;数据库=;Uid=@;Pwd={your_password_here};加密=是;连接超时=30

如果必须使用jdbc驱动程序和连接字符串,可以尝试在Jython中而不是Python中引用文档


如果有任何问题,请随时告诉我。

您可以试试:my_jdbc_test.write.save(“my_jdbc_test.parquet”,format=“parquet”)?我对您的答案感到困惑,因为当我修改配置文件(例如,上面的本地示例)时,jdbc工作得非常好;我只是试图在初始化期间通过命令行而不是通过配置文件指向它。所以对我来说,这实际上不是一个JDBC问题,因为这一切都很好,这是一个PySpark初始化问题:如何在启动过程中指向一个JAR文件,使JDBC驱动程序到达所有节点?我让驱动程序在主机上工作,否则
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>;