Код Pyspark или шаги для подключения к каталогу Presto SQL и выполнения запроса к базе данных postgresql с помощью pyspark? - PullRequest
1 голос
/ 15 апреля 2019

У меня есть pyspark, настроенный для непосредственной работы с PostgreSQL.Однако я хочу передать данные из spark в presto, используя соединитель jdbc, а затем выполнить запрос на postgresql, используя pyspark и presto.Как я могу сделать это по коду?

from pyspark.sql import SparkSession
from pyspark import SparkContext,SparkConf
from pyspark.sql import SQLContext
import sys
sys.path.append('/usr/local/lib/python3.6/dist-packages')
import requests
import json, ast

sc = SparkContext.getOrCreate()
sqlContext = SQLContext(sc)
spark = SparkSession.builder \
.master("local") \
.appName("jdbc data sources") \
.config("spark.sql.shuffle.partitions", "4") \
.getOrCreate()
driver = "io.prestosql.jdbc.PrestoDriver" 
#path = "//host:port/prestosql/?user=<username>&password=<passwd>"
path = "//host:port/prestosql<catalog>"
url = "jdbc:presto:" + path
tablename = <tablename>
dbDataFrame = spark.read.format("jdbc").option("url", url).option("dbtable", "<select query>").option("driver", driver).load()

Что я делаю не так?Я хочу выполнить запрос на выборку в postgresql через presto и передать результат обратно в spark, используя pyspark.

Я получаю следующую ошибку:

in get_return_value py4j.protocol.Py4JJavaError: An error occurred while 
calling o53.load. : java.sql.SQLException: Authentication using 
username/password requires SSL to be enabled at 
io.prestosql.jdbc.PrestoDriverUri.setupClient(PrestoDriverUri.java:160) at 
io.prestosql.jdbc.PrestoDriver.connect(PrestoDriver.java:91) at  org.apache.spark.sql.execution.datasources.jdbc.DriverWrapper.connect(DriverWrapper.scala:45)

Когда я включаю .option ("SSL", "true"), я получаю новую ошибку:

py4j.protocol.Py4JJavaError: An error occurred while calling o84.load. : 
java.sql.SQLException: Error executing query at 
io.prestosql.jdbc.PrestoStatement.internalExecute(PrestoStatement.jav a:284) 
at io.prestosql.jdbc.PrestoStatement.execute(PrestoStatement.java:229) at 
io.prestosql.jdbc.PrestoPreparedStatement.<init>(PrestoPreparedStatem 
ent.java:80

Что я делаю не так .. просьба помочь

...