我正在尝试从 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 过滤结果(不要先加载整个表)

使用 pyspark 连接配置单元表

如何从 PySpark 的 SQLite db 文件加载表?

从 pyspark 访问 S3 存储桶中的文件