我正在尝试从 pyspark 访问 mysql 表。我正在尝试使用:
Posted
技术标签:
【中文标题】我正在尝试从 pyspark 访问 mysql 表。我正在尝试使用:【英文标题】:I am attempting to access a mysql table from pyspark. I am attempting this using : 【发布时间】:2019-07-31 13:40:13 【问题描述】:esp_domains = spark.read.format("jdbc") \
.option("url", "jdbc:mysql://my.ip.com/tablename") \
.option("driver", "com.mysql.jdbc.Driver").option("dbtable", "tablename")\
.option("user", "root").option("password", "root") \
.load()
这遇到了一些会产生大量文本的错误,其中包含:
py4j.protocol.Py4JJavaError: An error occurred while calling o49.load.: java.lang.ClassNotFoundException: com.mysql.jdbc.Drive
我放了一个我显然需要的文件,即
mysql-connector-java-5.1.35.jar
在各个地方,包括
/usr/share/mysql-connector-java-5.1.35.jar
/usr/share/java/mysql-connector-java-5.1.35.jar
/usr/bin/mysql-connector-java-5.1.35.jar
/usr/lib/jvm/java-11-openjdk-amd64/bin/mysql-connector-java-5.1.35.jar
虽然我没有找到一个 openjdk 10.0.1 文件夹来放这个。
【问题讨论】:
你使用的是spark,所以驱动程序必须在spark库中而不是java。 将 jar 作为--driver-class-path /usr/share/mysql-connector-java-5.1.35.jar
传递给您的spark-submit
命令
Read This 会有所帮助。
【参考方案1】:
您可以使用以下功能。将 SparkSession 对象和其他相关变量传递给它。据我所知,SQL 驱动程序会自动下载。
def connect_to_sql(spark, jdbc_hostname, jdbc_port, database, data_table, username, password):
jdbc_url = "jdbc:mysql://0:1/2".format(jdbc_hostname, jdbc_port, database)
connection_details =
"user": username,
"password": password,
"driver": "com.mysql.cj.jdbc.Driver"
df = spark.read.jdbc(url=jdbc_url, table=data_table, properties=connection_details)
return df
【讨论】:
以上是关于我正在尝试从 pyspark 访问 mysql 表。我正在尝试使用:的主要内容,如果未能解决你的问题,请参考以下文章
在 python 3 中使用 pyspark 从 MySql db 加载数据
使用 pySpark 将 DataFrame 写入 mysql 表
从 Postgres 加载之前的 Pyspark 过滤结果(不要先加载整个表)