![](/img/trans.png)
[英]Connecting to a postgresql db using JDBC from the Bluemix Apache Spark service
[英]Using Postgresql JDBC source with Apache Spark on EMR
我已經在運行現有的EMR集群,並希望從Postgresql DB源創建DF。
為此,似乎您需要使用更新的spark.driver.extraClassPath
修改spark-defaults.conf並指向已經在主節點和從屬節點上下載的相關PostgreSQL JAR, 或者可以將它們作為參數添加到提交火花的工作。
由於我想使用現有的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
幫助表示贊賞。
檢查驅動程序的github倉庫。 類路徑似乎類似於org.postgresql.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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.