2016-12-02 27 views
1

私はRedshiftに単純なデータセットを書きたいPOCをやっています。Spark 2.0.1を使用してRedshiftにデータを書き込む

私は、次のしているSBTファイル:

name := "Spark_POC" 

version := "1.0" 

scalaVersion := "2.10.6" 


libraryDependencies += "org.apache.spark" % "spark-core_2.10" % "2.0.1" 

libraryDependencies += "org.apache.spark" % "spark-sql_2.10" % "2.0.1" 

resolvers += "jitpack" at "https://jitpack.io" 

libraryDependencies += "com.databricks" %% "spark-redshift" % "3.0.0-preview1" 

と、次のコード:

object Main extends App{ 

    val conf = new SparkConf().setAppName("Hello World").setMaster("local[2]") 

    System.setProperty("hadoop.home.dir", "C:\\Users\\Srdjan Nikitovic\\Desktop\\scala\\hadoop") 

    val spark = SparkSession 
    .builder() 
    .appName("Spark 1") 
    .config(conf) 
    .getOrCreate() 


    val tempS3Dir = "s3n://access_key:[email protected]_location" 

    spark.sparkContext.hadoopConfiguration.set("fs.s3n.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem") 
    spark.sparkContext.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", "access_key") 
    spark.sparkContext.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey", "secret_access_key") 

    val data = 
    spark 
     .read 
     .csv("hello.csv") 

    data.write 
    .format("com.databricks.spark.redshift") 
    .option("url", "jdbc:redshift://redshift_server:5439/database?user=user_name&password=password") 
    .option("dbtable", "public.testSpark") 
    .option("forward_spark_s3_credentials",true) 
    .option("tempdir", tempS3Dir) 
    .mode("error") 
    .save() 
} 

は私がのIntelliJを通して、ローカルのWindowsマシンからコードを実行しています。

私は次のエラーを取得する:

Exception in thread "main" java.lang.ClassNotFoundException: Could not load an Amazon Redshift JDBC driver; see the README for instructions on downloading and configuring the official Amazon driver.

私は、ほぼすべての火花赤方偏移ドライバのバージョン(1.0.0、2.0.0、2.0.1、現在は3.0.0-PREVIEWで試してみました)、私はこのコードを動作させることができません。

助けが必要ですか?

答えて

0

まず、Redshift JDBC driver from Amazonをダウンロードする必要があります。

次に、このコードが実行されている環境でSparkに通知する必要があります。例えば。 EMR上で実行されているspark-shellのために:

spark-shell … --jars /usr/share/aws/redshift/jdbc/RedshiftJDBC41.jar 
+0

私はEMR上のコードを実行していないのです、私は、実行ボタンをクリックすることで、私のラップトップ上のIntelliJを通してそれを実行しています。 これについてのご意見はありますか? –

+0

ええ、EMRの事は単なる例です。私はIntelliJについて具体的にはわかりませんが、基本的にJVMにこのJarの位置について実行していることを伝えるだけです。 –

関連する問題