【问题标题】:How to connect to redshift data using Spark on Amazon EMR cluster如何在 Amazon EMR 集群上使用 Spark 连接到 Redshift 数据
【发布时间】:2019-02-16 10:36:09
【问题描述】:

我有一个正在运行的 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-submitextra JARS 一起运行。

如何从 Spark-shell 连接到 redshift 数据?这是在 Spark 中配置连接的正确 JAR 吗?

【问题讨论】:

    标签: apache-spark amazon-redshift


    【解决方案1】:

    生成的错误是因为您在读取时缺少.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。

    您可能仍会遇到类路径/查找驱动程序的问题,但此更改应该会为您提供更有用的错误输出。我假设您列出的文件夹位置位于 EMR 上 Spark 的类路径中,并且这些驱动程序版本看起来是相当最新的。这些驱动程序应该可以工作。

    注意,这仅适用于从 Redshift 读取。如果您需要写入 Redshift,最好的选择是使用适用于 Spark 的 Databricks Redshift 数据源 - https://github.com/databricks/spark-redshift

    【讨论】:

      猜你喜欢
      • 2015-10-21
      • 2017-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 2017-08-13
      相关资源
      最近更新 更多