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 driverClassNotFoundException。 我已将文件移至容器,那里一切正常。

我已确保 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?

如何从 pyspark 中的本地 jar 导入包?

我可以在本地机器上的 python 上运行 spark 命令到 hadoop 吗?

快速搭建你的Spark开发环境

在win10上搭建pyspark,

pyspark 给出以下错误无法在 /tmp 中创建本地目录