【问题标题】:Pyspark code or steps to connect to Presto SQL catalog and execute query on postgresql db using pyspark?使用 pyspark 连接到 Presto SQL 目录并在 postgresql db 上执行查询的 Pyspark 代码或步骤?
【发布时间】:2019-09-05 12:25:00
【问题描述】:

我已将 pyspark 配置为直接使用 PostgreSQL。但是,我想使用 jdbc 连接器将数据从 spark 传递到 presto,然后使用 pyspark 和 presto 在 postgresql 上运行查询。我怎样才能在代码方面做到这一点?

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()

我做错了什么?我想通过 presto 在 postgresql 上运行选择查询,并使用 pyspark 将结果传回 spark。

我收到以下错误:

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

我做错了什么......请帮助

【问题讨论】:

  • 您遇到了什么问题?
  • 我收到以下错误:在 get_return_value py4j.protocol.Py4JJavaError:调用 o53.load 时发生错误。 : java.sql.SQLException: 使用用户名/密码进行身份验证需要在 io.prestosql.jdbc.PrestoDriver.connect(PrestoDriver.java:91) 的 io.prestosql.jdbc.PrestoDriverUri.setupClient(PrestoDriverUri.java:160) 启用 SSL ) 在 org.apache.spark.sql.execution.datasources.jdbc.DriverWrapper.connect(DriverWrapper.scala:45)
  • 当我启用 .option("SSL","true") 时,我收到新错误:py4j.protocol.Py4JJavaError:调用 o84.load 时发生错误。 : java.sql.SQLException: 在 io.prestosql.jdbc.PrestoStatement.execute(PrestoStatement.java:229) 在 io.prestosql.internalExecute(PrestoStatement.jav a:284) 执行查询时出错。 jdbc.PrestoPreparedStatement.(PrestoPreparedStatement.java:80
  • 我做错了什么......请帮助
  • 我建议您更新您的问题并添加您在 cmets 中提供的错误,以便人们可以更好地帮助您。

标签: postgresql apache-spark pyspark presto trino


【解决方案1】:

我猜你的 sql 查询中可能有错误。首选语法类似于 .option("dbtable","(select * from sample_table)a").load()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-29
    • 2019-11-10
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 2021-03-27
    • 2020-11-12
    • 2020-07-10
    相关资源
    最近更新 更多