gpt4 book ai didi

python - 在启动时不使用配置文件将 JDBC 驱动程序添加到 PySpark

转载 作者:行者123 更新时间:2023-11-28 19:13:33 25 4
gpt4 key购买 nike

我正在尝试在 Spark 中使用 JDBC 从 MS SQL 表(在 Azure 中)读取数据并将其保存为 parquet 文件(本地或保存到 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)

>>>

但是,当我尝试将其作为 Parquet 文件保存到本地磁盘时,出现驱动程序错误:

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 已添加到主节点,但错误的根源可能是它没有被推送到工作节点?我搜索了很多却找不到任何东西。

提前致谢。

最佳答案

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

所以需要使用Python的odbc驱动和连接字符串,请尝试安装Python包pymssql要访问 SQL 数据库,请参阅文档 http://pymssql.org/en/stable/ .

使用 Python 进行 ODBC 的连接字符串如下。

Driver={SQL Server Native Client 10.0};Server=tcp:<your-server>.database.windows.net,1433;Database=<my_db>;Uid=<your-username>@<your-server>;Pwd={your_password_here};Encrypt=yes;Connection Timeout=30;

如果必须使用jdbc驱动和连接字符串,可以尝试引用文档 Databases and Jython: Object Relational Mapping and Using JDBC 在 Jython 中使用而不是在 Python 中使用。

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

关于python - 在启动时不使用配置文件将 JDBC 驱动程序添加到 PySpark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36503470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com