【问题标题】:Not able to connect to postgres using jdbc in pyspark shell无法在 pyspark shell 中使用 jdbc 连接到 postgres
【发布时间】:2015-06-22 13:07:30
【问题描述】:

我在本地 Windows 上使用独立集群,并尝试使用以下代码从我们的一台服务器加载数据 -

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
df = sqlContext.load(source="jdbc", url="jdbc:postgresql://host/dbname", dbtable="schema.tablename")

我已将 SPARK_CLASSPATH 设置为 -

os.environ['SPARK_CLASSPATH'] = "C:\Users\ACERNEW3\Desktop\Spark\spark-1.3.0-bin-hadoop2.4\postgresql-9.2-1002.jdbc3.jar"

在执行 sqlContext.load 时,它会抛出错误,提示“找不到适合 jdbc:postgresql 的驱动程序”。我已经尝试搜索网络,但无法找到解决方案。

【问题讨论】:

  • 它的“没有找到适合 jdbc:postgresql 的驱动程序”只有.. 更新的问题。
  • 那么在这种情况下,驱动程序所需的 jar 文件不可用。
  • 存在所需的 jar 文件,但不知何故 SPARK 无法识别它。 SPARK_CLASSPATH 存在一些问题。我不确定如何设置 SPARK_CLASSPATH。
  • "..\postgresql-9.2-1002.jdbc3" 听起来不像 jar 文件的名称,因为它们通常以 .jar 结尾。您需要将 jar 文件添加到类路径,而不是包含 jar 文件的文件夹。
  • 添加了 Mark 但仍然无法正常工作...

标签: postgresql jdbc apache-spark apache-spark-sql pyspark


【解决方案1】:

也许会有所帮助。

在我的环境中,SPARK_CLASSPATH 包含 postgresql 连接器的路径

from pyspark import SparkContext, SparkConf
from pyspark.sql import DataFrameReader, SQLContext
import os

sparkClassPath = os.getenv('SPARK_CLASSPATH', '/path/to/connector/postgresql-42.1.4.jar')

# Populate configuration
conf = SparkConf()
conf.setAppName('application')
conf.set('spark.jars', 'file:%s' % sparkClassPath)
conf.set('spark.executor.extraClassPath', sparkClassPath)
conf.set('spark.driver.extraClassPath', sparkClassPath)
# Uncomment line below and modify ip address if you need to use cluster on different IP address
#conf.set('spark.master', 'spark://127.0.0.1:7077')

sc = SparkContext(conf=conf)
sqlContext = SQLContext(sc)

url = 'postgresql://127.0.0.1:5432/postgresql'
properties = {'user':'username', 'password':'password'}

df = DataFrameReader(sqlContext).jdbc(url='jdbc:%s' % url, table='tablename', properties=properties)

df.printSchema()
df.show()

这段代码允许在你需要的地方使用 pyspark。例如,我在 Django 项目中使用过。

【讨论】:

    【解决方案2】:

    我在使用 mysql 时遇到了同样的问题,并且无法使用 SPARK_CLASSPATH 方法让它工作。但是我确实让它与额外的命令行参数一起工作,请参阅this question的答案

    为避免必须点击才能使其正常工作,您必须执行以下操作:

    pyspark --conf spark.executor.extraClassPath=<jdbc.jar> --driver-class-path <jdbc.jar> --jars <jdbc.jar> --master <master-URL>
    

    【讨论】:

    • 呃,这行代码不完整吧?哪些标志后面需要一个值?
    • 是的,标记不知何故丢失了——我重新编辑了它
    • 非常感谢。谢谢。
    • 知道如何在 PyCharm 中执行此操作吗?
    猜你喜欢
    • 2020-12-01
    • 1970-01-01
    • 2022-11-01
    • 2016-08-21
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    相关资源
    最近更新 更多