【发布时间】:2019-06-07 05:05:52
【问题描述】:
我正在运行现有的 EMR 集群并希望从 Postgresql 数据库源创建 DF。
为此,您似乎需要使用更新的spark.driver.extraClassPath 修改 spark-defaults.conf 并指向已在主从节点上下载的相关 PostgreSQL JAR,或 您可以将这些作为参数添加到 spark-submit 作业。
由于我想使用现有的 Jupyter 笔记本来处理数据,而不是真的想重新启动集群,解决此问题的最有效方法是什么?
我尝试了以下方法:
在主从服务器上创建新目录(/usr/lib/postgresql/ 并将 PostgreSQL jar 复制到其中。(postgresql-9.41207.jre6.jar)
-
编辑 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:/$ -
尝试使用以下代码在 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
帮助表示赞赏。
【问题讨论】:
-
驱动程序应该在驱动程序和
executor(spark.executor.extraClassPath) 上。此外,驱动程序的版本看起来很时髦——你不太可能使用 JRE 6.. -
是否需要重新启动主/集群才能“读入”spark-defaults.conf 文件?还是会在进行 JDBC 调用时动态检查?
标签: postgresql amazon-web-services apache-spark jdbc pyspark