gpt4 book ai didi

postgresql - 在 EMR 上将 Postgresql JDBC 源代码与 Apache Spark 结合使用

转载 作者:行者123 更新时间:2023-11-29 12:50:54 26 4
gpt4 key购买 nike

我有现有的 EMR 集群正在运行,并希望从 Postgresql 数据库源创建 DF。

为此,您似乎需要使用更新的 spark.driver.extraClassPath 修改 spark-defaults.conf 并指向已在主从上下载的相关 PostgreSQL JAR节点,您可以将这些作为参数添加到 spark-submit 作业。

由于我想使用现有的 Jupyter notebook 来处理数据,而不是真的想重新启动集群,解决这个问题的最有效方法是什么?

我尝试了以下方法:

  1. 在主从上创建新目录(/usr/lib/postgresql/,并将 PostgreSQL jar 复制到其中。(postgresql-9.41207.jre6.jar)

  2. 编辑 spark-default.conf 以包含通配符位置

    spark.driver.extraClassPath  :/usr/lib/postgresql/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/$
  3. 尝试使用以下代码在 Jupyter 单元格中创建数据框:

    SQL_CONN = "jdbc:postgresql://some_postgresql_db:5432/dbname?user=user&password=password"
    spark.read.jdbc(SQL_CONN, table="someTable", properties={"driver":'com.postgresql.jdbc.Driver'})

我收到如下 Java 错误:

Py4JJavaError: An error occurred while calling o396.jdbc.
: java.lang.ClassNotFoundException: com.postgresql.jdbc.Driver

感谢帮助。

最佳答案

我认为您不需要在从属中复制 postgres jar,因为驱动程序和集群管理器会处理所有事情。我通过以下方式从 Postgres 外部源创建了数据框:

下载 postgres 驱动 jar:

cd $HOME && wget https://jdbc.postgresql.org/download/postgresql-42.2.5.jar

创建数据框:

atrribute = {'url' : 'jdbc:postgresql://{host}:{port}/{db}?user={user}&password={password}' \
.format(host=<host>, port=<port>, db=<db>, user=<user>, password=<password>),
'database' : <db>,
'dbtable' : <select * from table>}
df=spark.read.format('jdbc').options(**attribute).load()

提交到 spark 作业:提交 spark 作业时将下载的 jar 添加到驱动程序类路径。

--properties spark.driver.extraClassPath=$HOME/postgresql-42.2.5.jar,spark.jars.packages=org.postgresql:postgresql:42.2.5 

关于postgresql - 在 EMR 上将 Postgresql JDBC 源代码与 Apache Spark 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54160695/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com