【问题标题】:Write data to Redshift using Spark 2.0.1使用 Spark 2.0.1 将数据写入 Redshift
【发布时间】:2017-04-17 08:15:14
【问题描述】:

我正在做 POC,我想将一些简单的数据集写入 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:secret_access_key@bucket_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 机器运行代码。

我收到以下错误:

线程“main”java.lang.ClassNotFoundException 中的异常:无法加载 Amazon Redshift JDBC 驱动程序;有关下载和配置官方 Amazon 驱动程序的说明,请参阅自述文件。

我已经尝试了几乎所有版本的 Spark-Redshift 驱动程序(1.0.0、2.0.0、2.0.1 和现在的 3.0.0-PREVIEW),但我无法让这段代码工作。

有什么帮助吗?

【问题讨论】:

    标签: apache-spark spark-dataframe amazon-redshift


    【解决方案1】:

    您首先需要下载Redshift JDBC driver from Amazon

    那么你必须在这段代码运行的环境中告诉 Spark。例如。对于在 EMR 上运行的 spark-shell

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

    【讨论】:

    • 我没有在 EMR 上运行代码,而是通过笔记本电脑上的 Intellij 运行它,方法是单击运行按钮。有什么想法吗?
    • 是的,EMR 只是一个例子。我不具体了解 IntelliJ,但您基本上只需要告诉它正在运行的 JVM 关于这个 jar 的位置。
    • 我使用了这个 Jar s3.amazonaws.com/redshift-downloads/drivers/jdbc/1.2.20.1043/…,但我仍然收到异常 java.lang.ClassNotFoundException: Failed to find data source: com.databricks.spark.redshift。可能建议的 Jar 还不够?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多