このエラーは、依存関係の欠落が原因です。
Spark ホーム ディレクトリに次の jar ファイルがあることを確認します。
- spark-redshift_2.10-3.0.0-preview1.jar
- RedshiftJDBC41-1.1.10.1010.jar
- hadoop-aws-2.7.1.jar
- aws-java-sdk-1.7.4.jar
- (aws-java-sdk-s3-1.11.60.jar) (新しいバージョンですが、すべてが機能したわけではありません)
これらの jar ファイルを $SPARK_HOME/jars/ に置き、spark を開始します。
pyspark --jars $SPARK_HOME/jars/spark-redshift_2.10-3.0.0-preview1.jar,$SPARK_HOME/jars/RedshiftJDBC41-1.1.10.1010.jar,$SPARK_HOME/jars/hadoop-aws-2.7.1.jar,$SPARK_HOME/jars/aws-java-sdk-s3-1.11.60.jar,$SPARK_HOME/jars/aws-java-sdk-1.7.4.jar
(SPARK_HOME = "/usr/local/Cellar/apache-spark/$SPARK_VERSION/libexec" にする必要があります)
これにより、必要なすべての依存関係で Spark が実行されます。awsAccessKeys を使用している場合は、認証タイプ 'forward_spark_s3_credentials'=True も指定する必要があることに注意してください。
from pyspark.sql import SQLContext
from pyspark import SparkContext
sc = SparkContext(appName="Connect Spark with Redshift")
sql_context = SQLContext(sc)
sc._jsc.hadoopConfiguration().set("fs.s3n.awsAccessKeyId", <ACCESSID>)
sc._jsc.hadoopConfiguration().set("fs.s3n.awsSecretAccessKey", <ACCESSKEY>)
df = sql_context.read \
.format("com.databricks.spark.redshift") \
.option("url", "jdbc:redshift://example.coyf2i236wts.eu-central- 1.redshift.amazonaws.com:5439/agcdb?user=user&password=pwd") \
.option("dbtable", "table_name") \
.option('forward_spark_s3_credentials',True) \
.option("tempdir", "s3n://bucket") \
.load()
その後の一般的なエラーは次のとおりです。
- Redshift 接続エラー:「SSL オフ」
- 解決:
.option("url", "jdbc:redshift://example.coyf2i236wts.eu-central- 1.redshift.amazonaws.com:5439/agcdb?user=user&password=pwd?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory")
- S3 エラー: データをアンロードするとき、たとえば df.show() の後、次のメッセージが表示されます。
- 解決策: バケットとクラスターは同じリージョン内で実行する必要があります