【问题标题】:Load JDBC driver for Spark DataFrame 'write' using 'jdbc' in Python Script在 Python 脚本中使用 'jdbc' 为 Spark DataFrame 'write' 加载 JDBC 驱动程序
【发布时间】:2019-10-19 10:40:07
【问题描述】:

我正在尝试从 python 应用程序加载 MySQL JDBC 驱动程序。我没有调用“bin/pyspark”或“spark-submit”程序;相反,我有一个 Python 脚本,我在其中初始化“SparkContext”和“SparkSession”对象。 我知道我们可以在调用 'pyspark' 时传递 '--jars' 选项,但是如何在我的 python 应用程序中加载和指定 jdbc 驱动程序?

【问题讨论】:

  • 为什么不用pymysql?这是从 python 连接的标准方式,可以使用 pip 轻松安装。 pymysql.readthedocs.io/en/latest
  • 谢谢。原因是我使用的设计是通过“jaydebeapi”连接到所有数据库(可以通过 JDBC 连接)
  • 在这种情况下,我需要将我的 DataFrame 写入我需要通过 Spark 连接的 MySQL。
  • 你试过了吗?在连接中提供 JDBC 路径? conn = jdbc.connect(jdbc_class, [url, user, pw], jdbc_path)
  • 我正在尝试使用 spark 的 DataFrameWriter,它不接受 jar 文件作为选项。

标签: python apache-spark pyspark


【解决方案1】:

我想你想做这样的事情

from pyspark.sql import SparkSession

# Creates spark session with JDBC JAR
spark = SparkSession.builder \
    .appName('stack_overflow') \
    .config('spark.jars', '/path/to/mysql/jdbc/connector') \
    .getOrCreate()

# Creates your DataFrame with spark session with JDBC
df = spark.createDataFrame([
    (1, 'Hello'),
    (2, 'World!')
], ['Index', 'Value'])

df.write.jdbc('jdbc:mysql://host:3306/my_db', 'my_table',
              mode='overwrite',
              properties={'user': 'db_user', 'password': 'db_pass'})

【讨论】:

  • 感谢您的选择。我发布了我的解决方案。
【解决方案2】:

答案是像这样创建 SparkContext:

spark_conf = SparkConf().set("spark.jars",  "/my/path/mysql_jdbc_driver.jar")
sc = SparkContext(conf=spark_conf)

这会将 mysql 驱动程序加载到类路径中。

【讨论】:

    猜你喜欢
    • 2011-08-24
    • 1970-01-01
    • 2017-12-03
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多