Как подключиться к данным красного смещения с помощью Spark на кластере Amazon EMR - PullRequest
0 голосов
/ 11 сентября 2018

У меня работает кластер Amazon EMR.Если я сделаю

ls -l /usr/share/aws/redshift/jdbc/

, это даст мне

RedshiftJDBC41-1.2.7.1003.jar
RedshiftJDBC42-1.2.7.1003.jar

Теперь я хочу использовать это jar для подключения к моим Redshift database в моем spark-shell.Вот что я делаю -

import org.apache.spark.sql._
val sqlContext = new SQLContext(sc)


val df : DataFrame = sqlContext.read
.option("url","jdbc:redshift://host:PORT/DB-name?user=user&password=password")
.option("dbtable","tablename")
.load()

и я получаю эту ошибку -

org.apache.spark.sql.AnalysisException: Unable to infer schema for Parquet. It must be specified manually.;

Я не уверен, правильно ли я указал format при чтении данных.Я также прочитал, что spark-redshift driver доступен, но я не хочу запускать spark-submit с extra JARS.

Как подключиться к данным красного смещения из Spark-shell?Это правильный JAR для настройки соединения в Spark?

1 Ответ

0 голосов
/ 13 сентября 2018

Ошибка генерируется из-за того, что вы пропустили .format("jdbc") в вашем чтении. Должно быть:

val df : DataFrame = sqlContext.read
  .format("jdbc")
  .option("url","jdbc:redshift://host:PORT/DB-name?user=user&password=password")
  .option("dbtable","tablename")
  .load()

По умолчанию Spark предполагает, что источником являются файлы Parquet, поэтому в ошибке упоминается Parquet.

Вы все еще можете столкнуться с проблемами с classpath / поиском драйверов, но это изменение должно дать вам более полезный вывод ошибок. Я предполагаю, что указанное вами местоположение папки находится в пути к классу для Spark на EMR, и эти версии драйверов выглядят достаточно актуальными. Эти драйверы должны работать.

Обратите внимание, это будет работать только для чтения из Redshift. Если вам нужно написать в Redshift, лучше всего использовать источник данных Redshift Databricks для Spark - https://github.com/databricks/spark-redshift.

...