代码之家  ›  专栏  ›  技术社区  ›  kluu

在jupyter笔记本中使用pyspark时,如何指定驱动程序类路径?

  •  0
  • kluu  · 技术社区  · 6 年前

    我想在jupyter笔记本中查询一个带有pyspark的PostgreSQL。我浏览了StackOverflow上的很多问题,但没有一个对我有用,主要是因为答案似乎过时了。以下是我的最小代码:

    from pyspark.sql import SparkSession
    spark = SparkSession.builder.getOrCreate()
    url = 'jdbc:postgresql://host/dbname'
    properties = {'user': 'username', 'password': 'pwd'}
    df = spark.read.jdbc(url=url, table='tablename', properties=properties)
    

    从笔记本运行此操作将引发以下错误:

    Py4JJavaError: An error occurred while calling o69.jdbc.
    : java.sql.SQLException: No suitable driver
    at java.sql.DriverManager.getDriver(DriverManager.java:315)
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$7.apply(JDBCOptions.scala:85)
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$7.apply(JDBCOptions.scala:85)
    at scala.Option.getOrElse(Option.scala:121)...
    

    我发现的主要提示总结在下面的链接中,但不幸的是,我无法让它们在我的笔记本上工作:

    Pyspark connection to Postgres database in ipython notebook

    注意:我使用的是Spark 2.3.1和Python 3.6.3,如果我指定了jar的位置,我可以从pyspark shell连接到数据库。

    pyspark --driver-class-path /home/.../postgresql.jar --jars /home/.../jars/postgresql.jar
    

    感谢所有能帮我的人。

    编辑

    答案来自 How to load jar dependenices in IPython Notebook 已经在我分享自己的链接中列出,不为我工作。我已尝试从笔记本配置环境变量:

    import os
    os.environ['PYSPARK_SUBMIT_ARGS'] = '--driver-class-path /path/to/postgresql.jar --jars /path/to/postgresql.jar'
    

    文件路径或文件本身没有问题,因为当我指定并运行pyspark shell时,它可以正常工作。

    1 回复  |  直到 6 年前
        1
  •  1
  •   kluu    6 年前

    使用 config 方法对我有效:

    from pyspark.sql import SparkSession
    spark = SparkSession.builder.config('spark.driver.extraClassPath', '/path/to/postgresql.jar').getOrCreate()
    url = 'jdbc:postgresql://host/dbname'
    properties = {'user': 'username', 'password': 'pwd'}
    df = spark.read.jdbc(url=url, table='tablename', properties=properties)