python-3.x - MySQL 使用 PySpark 读取

标签 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)

当我运行它时,我收到以下错误:

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



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

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

我已经看到通过以下示例解决了这个问题
spark --package=mysql-connector-java testfile.py

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

最佳答案

您可以将参数传递给 spark-submit创建您的 sparkContext 时之前 SparkConf被初始化:

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)

或者您可以将它们添加到您的 $SPARK_HOME/conf/spark-defaults.conf

关于python-3.x - MySQL 使用 PySpark 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46023259/

相关文章:

eclipse - 函数在控制台中运行两次(python3,eclipse)

python - 如何在 python 中将 xml 文件转换为 csv 输出?

python - Venv 在 CentOS 中失败,确保 pip 丢失

python - pandas 在文档-单词矩阵中转换文档-单词列表

python - 又一个 Python 相对导入事故

loops - 在脚本中迭代/循环 Spark parquet 文件会导致内存错误/累积(使用 Spark SQL 查询)

apache-spark - 如何使用Window()计算PySpark中的滚动中位数?

apache-spark - pyspark.sql.DataFrameWriter.saveAsTable() 的格式

apache-spark - 如何在pyspark中使用foreach sink?

python - 等效于 Python 和 PySpark 中的 R data.table 滚动连接