在 EMR 中使用 spark ad scala 从 redshift 加载数据

Posted

技术标签:

【中文标题】在 EMR 中使用 spark ad scala 从 redshift 加载数据【英文标题】:Load data from redshift using spark ad scala in an EMR 【发布时间】:2020-02-22 17:03:00 【问题描述】:

我正在尝试使用 Spark 将 Redshift 与来自 EMR 集群的 zeppelin 中的 scala 连接起来,我使用了 spark-redshift 库,但它不起作用。我尝试了很多解决方案,但我不知道为什么它会出错


   val df  = spark.read .format("com.databricks.spark.redshift")
   .option("url", "jdbc:redshift://xx:xx/xxxx?user=xxx&password=xxx")
   .option("tempdir", path)
   .option("query", sql_query) .load() ```


``` java.lang.ClassNotFoundException: Failed to find data source:
com.databricks.spark.redshift. Please find packages at http://spark.apache.org/third-party-projects.html
 at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:657)
 at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:194)
 at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:167)
 ... 51 elided
Caused by: java.lang.ClassNotFoundException: com.databricks.spark.redshift.DefaultSource
 at scala.reflect.internal.util.AbstractFileClassLoader.findClass(AbstractFileClassLoader.scala:62)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
 at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$20$$anonfun$apply$12.apply(DataSource.scala:634)
 at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$20$$anonfun$apply$12.apply(DataSource.scala:634)
 at scala.util.Try$.apply(Try.scala:192)
 at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$20.apply(DataSource.scala:634)
 at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$20.apply(DataSource.scala:634)
 at scala.util.Try.orElse(Try.scala:84)
 at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:634)
 ... 53 more ```

Should I import something before ? or may be do some configuration


【问题讨论】:

需要整个日志——或者至少是重要的部分——错误信息。 现在怎么样? 类未找到.. 【参考方案1】:

为了在 EMR 中运行特定模块,您必须将这些模块添加到您的集群中。 (它们不会自动出现)

您的错误是找不到模块。 看一眼 https://aws.amazon.com/blogs/big-data/powering-amazon-redshift-analytics-with-apache-spark-and-amazon-machine-learning/

【讨论】:

以上是关于在 EMR 中使用 spark ad scala 从 redshift 加载数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS EMR 中一起添加 2 个(pyspark、scala)步骤?

亚马逊EMR火花上的蜂巢

在 emr 中使用 spark 从 S3 读取 avro 失败

如何使用 EMR 中的引导操作在 spark-conf 中添加 spark.executor.extraClassPath

在 emr 集群中使用 spark 从 oracle 中获取数据并进行处理

在 EMR 集群上引导 Spark 3.0.0