pyspark 需要本地安装 Spark 吗?
Posted
技术标签:
【中文标题】pyspark 需要本地安装 Spark 吗?【英文标题】:Do pyspark need a local Spark installation? 【发布时间】:2019-07-29 14:58:16 【问题描述】:我正在尝试使用 Spark。尝试在 docker 容器中运行 Spark 时创建与数据库的简单 SQL 连接。
我的笔记本电脑上没有安装 Spark。只在我的 docker 容器内。
我的笔记本电脑上有以下代码:
spark = SparkSession \
.builder \
.master("spark://localhost:7077") \ # <-- Docker container with master and worker
.appName("sparktest") \
.getOrCreate()
jdbcDF = spark.read.format("jdbc") \
.option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") \
.option("url", "jdbc:sqlserver://xxx") \
.option("dbtable", "xxx") \
.option("user", "xxx") \
.option("password", "xxx").load()
我无法让它工作。
我要么从 Java 获得 java.sql.SQLException: No suitable driver
或 ClassNotFoundException
。
我已将文件移至容器,那里一切正常。
我已确保 mssql jar 文件位于驱动程序和执行程序的 SPARK_CLASSPATH 上。
我是否应该在本地安装 Spark,以便我使用 PySpark 对抗在我的 docker 容器中运行的远程主机?
它似乎试图在我的笔记本电脑上查找 SQL 驱动程序?
如果我在 docker 容器内使用 spark-submit 运行代码,一切都很好。
我试图避免使用 docker 容器中托管的 jupyter 的路线,但希望不必在我的 Windows 笔记本电脑上安装 Spark 并将其保留在我的 linux 容器中。
【问题讨论】:
这是预期行为。使用spark-submit
,应用程序可以获得由各种配置来源组成的完整的火花环境。您拥有的代码实际上在您的主机上启动了一个驱动程序,该驱动程序缺少所有配置以及 JDBC 驱动程序。因此错误。您是否尝试将 SQLServerDriver
添加到 sbt 依赖项?
@D3V 我不明白。为什么我需要笔记本电脑上的数据库连接器。我不想将数据读入我的笔记本电脑,它需要进入在生产中运行在高 RAM 服务器上的容器。我之前只使用过 Sparklyr,集群会从数据库中读取数据,而不是通过我自己的工作站,直到我将其从 Spark 收集到 R 中。
这取决于您的驱动机器在哪里,从本地机器运行作业使其成为驱动机器。这实质上意味着,本地需要 JDBC 驱动程序。它不需要完整的火花安装。但是,所需的 jars 需要位于驱动程序类路径上,而驱动程序类路径恰好是您的笔记本电脑。附带说明一下,如果您正在尝试,那么使用 zeppelin 或 jupyter 之类的笔记本比这种方法要好得多。
嗯,好吧,我想我当时误解了 pyspark 的目的。它只是 python 包装器中的 Spark API。它不是可用于远程与 Spark 交互的 python Spark 客户端。
jaceklaskowski.gitbooks.io/mastering-apache-spark/… 参考这个,你会掌握一些窍门的。
【参考方案1】:
我之前遇到过这个问题,您可以下载 jdbc 驱动程序并手动设置驱动程序配置并提供 jdbc 驱动程序路径
from pyspark.context import SparkConf
conf = SparkConf()
conf.set('spark.jars', '/PATH_OF_DRIVER/driver.jar')
conf.set('spark.executor.extraClassPath', '/PATH_OF_DRIVER/driver.jar')
【讨论】:
谢谢你,阿里这是我所做的,它在没有安装 Spark 的情况下工作。以上是关于pyspark 需要本地安装 Spark 吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何从本地安装的 spark 连接到 aws-redshift?