Чтение из Redshift в Spark Dataframe (модуль Spark-Redshift) - PullRequest
0 голосов
/ 20 ноября 2018

Я слежу за учебником по искровому смещению, чтобы прочитать из красного смещения в искру (блоки данных).У меня есть следующий код:

val tempDir = "s3n://{my-s3-bucket-here}"



val jdbcUsername = "usernameExample"
val jdbcPassword = "samplePassword"
val jdbcHostname = "redshift.companyname.xyz"
val jdbcPort = 9293
val jdbcDatabase = "database"
val jdbcUrl = "sampleURL"


sc.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", "SAMPLEAWSKEY")
sc.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey", "SECRETKEYHERE")

val subs_dim = sqlContext.read.format("com.databricks.spark.redshift").option("url", jdbcUrl).option("tempdir", tempDir).option("dbtable", "example.exampledb").load()

Теперь, когда я пытаюсь запустить это, я получаю:

java.lang.IllegalArgumentException: requirement failed: You must specify a method for authenticating Redshift's connection to S3 (aws_iam_role, forward_spark_s3_credentials, or temporary_aws_*. For a discussion of the differences between these options, please see the README.

Я немного запутался, так как я определил awsAccesskeyID с помощьюsc.hadoopConfiguration.set.Я новичок в своей компании, поэтому мне интересно, если ключ AWS неправильный, или я что-то упускаю?

Спасибо!

1 Ответ

0 голосов
/ 21 ноября 2018

Я думаю, что единственная причина, по которой я вижу, это не передача учетных данных S3 соединению Redshift, поскольку вы не настроили forward_spark_s3_credentials.

Добавьте нижеприведенную опцию к вашему вызову.

option("forward_spark_s3_credentials", "true");

См. Ниже документация фрагмент.

Переслать учетные данные Spark S3 в Redshift: если для опции forward_spark_s3_credentials задано значение true, тогда эта библиотека автоматически обнаружит учетные данные, которые Spark использует дляподключиться к S3 и перенаправить эти учетные данные в Redshift через JDBC.

Надеюсь, это поможет вам!

...