Я хочу подключить свою искру, развернутую в EMR, к Presto, которая использует Hive в качестве мета-хранилища и S3 в качестве хранилища данных. Раньше я даже не мог выполнить загрузку информационного кадра из функции spark.read, доступной в pyspark, но тогда этот ответ решил эту проблему для меня. Однако из-за отложенного выполнения было обнаружено, что во время выборки счетчика происходит сбой запроса с ошибкой: истекло время ожидания соединения сокета.
Следует отметить, что тот же запрос select * from may30_1
в том же экземпляре с использованием CLI Presto, я смог получить результаты. Таким образом, это не относится к каким-либо сетевым соединениям между серверами.
Это код, который используется для выборки кадра данных:
jdbcDF = spark_session.read \
.format("jdbc") \
.option("driver", "com.facebook.presto.jdbc.PrestoDriver") \
.option("url", "jdbc:presto://my_presto_ip:8080/hive/default") \
.option("user", "my_user") \
.option("dbtable", "may30_1") \
.load()
Работающие линии:
>>> jdbcDF.head
<bound method DataFrame.head of DataFrame[id: int, name: string, alignment: string, gender: string, eyecolor: string, race: string, haircolor: string, publisher: string, skincolor: string, height: int, weight: int, _athena_row_number_: bigint, _athena_timestamp_: timestamp, _athena_commit_id_: string]>
Теперь тот же самый head
, если ему дан аргумент, скажем, 2, не будет работать, поскольку ему нужны данные.
>>> jdbcDF.head(3)
Здесь вы получите полный возврат.
Любой запрос, который принесет данные, выдает ошибки.