我有以下用於從Postgres數據庫將表加載到RDD的簡單代碼。Spark SQL RDD在pyspark中加載,但未在spark-submit中加載:「JDBCRDD:關閉連接」
# this setup is just for spark-submit, will be ignored in pyspark
from pyspark import SparkConf, SparkContext
from pyspark.sql import SQLContext
conf = SparkConf().setAppName("GA")#.setMaster("localhost")
sc = SparkContext(conf=conf)
sqlContext = SQLContext(sc)
# func for loading table
def get_db_rdd(table):
url = "jdbc:postgresql://localhost:5432/harvest?user=postgres"
print(url)
lower = 0
upper = 1000
ret = sqlContext \
.read \
.format("jdbc") \
.option("url", url) \
.option("dbtable", table) \
.option("partitionColumn", "id") \
.option("numPartitions", 1024) \
.option("lowerBound", lower) \
.option("upperBound", upper) \
.option("password", "password") \
.load()
ret = ret.rdd
return ret
# load table, and print results
print(get_db_rdd("mytable").collect())
我跑./bin/pyspark
然後粘貼到解釋器,它從我的表打印出來的數據符合市場預期。
現在,如果我的代碼保存到一個名爲test.py
文件,然後做./bin/spark-submit test.py
,它開始運行,但後來我看到這些的垃圾郵件我的控制檯永遠:
17/02/16 02:24:21 INFO Executor: Running task 45.0 in stage 0.0 (TID 45)
17/02/16 02:24:21 INFO JDBCRDD: closed connection
17/02/16 02:24:21 INFO Executor: Finished task 45.0 in stage 0.0 (TID 45). 1673 bytes result sent to driver
編輯:這是一個機。我還沒有開始任何主人或奴隸;是我在系統啓動後運行的唯一命令。我用主/從設置嘗試了相同的結果。 我spark-env.sh
文件看起來像這樣:
export SPARK_WORKER_INSTANCES=2
export SPARK_WORKER_CORES=2
export SPARK_WORKER_MEMORY=800m
export SPARK_EXECUTOR_MEMORY=800m
export SPARK_EXECUTOR_CORES=2
export SPARK_CLASSPATH=/home/ubuntu/spark/pg_driver.jar # Postgres driver I need for SQLContext
export PYTHONHASHSEED=1337 # have to make workers use same seed in Python3
它的工作原理,如果我火花提交剛剛從列表或某事創建RDD Python文件。我嘗試使用JDBC RDD時只遇到問題。我錯過了什麼?
我的設置'$ SPARK_CLASSPATH'應該已經可以做到這一點,不過我仍然嘗試了您的建議。取消設置envvar並運行'spark-submit --driver-class-path pg_driver.jar --jars pg_driver.jar test.py',它有同樣的問題。我想如果它錯過了驅動程序,它會拋出一些其他錯誤,如「找不到合適的驅動程序」。順便說一下,這是在一臺機器上(更新我的問題)。 – sudo