使用 PySpark 读取 MySQL

San*_*era 5 python-3.x pyspark-sql

我有以下测试代码:

from pyspark import SparkContext, SQLContext
sc = SparkContext('local')
sqlContext = SQLContext(sc)
print('Created spark context!')


if __name__ == '__main__':
    df = sqlContext.read.format("jdbc").options(
        url="jdbc:mysql://localhost/mysql",
        driver="com.mysql.jdbc.Driver",
        dbtable="users",
        user="user",
        password="****",
        properties={"driver": 'com.mysql.jdbc.Driver'}
    ).load()

    print(df)
Run Code Online (Sandbox Code Playgroud)

当我运行它时,出现以下错误:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

在 Scala 中,这是通过将 .jarmysql-connector-java导入项目来解决的。

但是,在 python 中,我不知道如何告诉 pyspark 模块链接 mysql-connector 文件。

我已经看到这个问题用类似的例子解决了

spark --package=mysql-connector-java testfile.py
Run Code Online (Sandbox Code Playgroud)

但我不想要这个,因为它迫使我以一种奇怪的方式运行我的脚本。我想要一个全 python 解决方案或在某处复制一个文件,或者在路径中添加一些内容。

MaF*_*aFF 7

You can pass arguments to spark-submit when creating your sparkContext before SparkConf is initialized:

import os
from pyspark import SparkConf, SparkContext

SUBMIT_ARGS = "--packages mysql:mysql-connector-java:5.1.39 pyspark-shell"
os.environ["PYSPARK_SUBMIT_ARGS"] = SUBMIT_ARGS
conf = SparkConf()
sc = SparkContext(conf=conf)
Run Code Online (Sandbox Code Playgroud)

or you can add them to your $SPARK_HOME/conf/spark-defaults.conf


MD.*_*HIN 5

from pyspark.sql import SparkSession

spark = SparkSession\
    .builder\
    .appName("Word Count")\
    .config("spark.driver.extraClassPath", "/home/tuhin/mysql.jar")\
    .getOrCreate()

dataframe_mysql = spark.read\
    .format("jdbc")\
    .option("url", "jdbc:mysql://localhost/database_name")\
    .option("driver", "com.mysql.jdbc.Driver")\
    .option("dbtable", "employees").option("user", "root")\
    .option("password", "12345678").load()

print(dataframe_mysql.columns)
Run Code Online (Sandbox Code Playgroud)

“/home/tuhin/mysql.jar”是mysql jar文件的位置