带有 EMR 和 Jupyter 笔记本的 Postgres JAR

Postgres JAR with EMR and Jupyter Notebooks

我正在尝试启动一个包含 Postgres 驱动程序 JAR 文件的 EMR 集群,以便我可以从 Postgres 加载数据并使用 PySpark 对其进行分析。我有我想包含的 JAR 存储在 S3 中。我尝试了以下操作:

1 - 输入以下配置:

[
  {
    "Classification": "presto-connector-postgresql",
    "Properties": {
      "connection-url": "jdbc:postgresql://example.net:5432/database",
      "connection-user": "MYUSER",
      "connection-password": "MYPASS"
    },
    "Configurations": []
  }
]

2 - 添加 JAR 作为自定义步骤(从 S3 选择 JAR)

3 - 添加 JAR 作为自定义 bootstrap 操作(从 S3 选择 JAR)

None 这些工作,我无法弄清楚如何在 Jupyter 中使用步骤 1 中的连接器,并且自定义 step/bootstrap 操作在我启动集群时都失败了。如何启动安装了 Postgres 驱动程序的 EMR 集群,以便我可以在 Jupyter 中查询我的数据?

编辑:

我使用以下 bootstrap 脚本将 JAR 复制到我的 master/worker 节点:

#!/bin/bash
aws s3 cp s3://BUCKETNAME/postgresql-42.2.8.jar /mnt1/myfolder

但还是报错如下:

An error was encountered:
An error occurred while calling o90.load.
: java.lang.ClassNotFoundException: org.postgresql.Driver

使用以下代码:

df = spark.read \
    .format("jdbc") \
    .option("url", "jdbcURL") \
    .option("user", "user") \
    .option("password", "password") \
    .option("driver", "org.postgresql.Driver") \
    .option("query", "select * from slm_files limit 100") \
    .load()

df.count()

在我的 Jupyter 笔记本的第一个单元格中使用这段代码为我解决了这个问题:

%%configure -f
{ "conf":{
          "spark.jars": "s3://JAR-LOCATION/postgresql-42.2.8.jar"
         }
}