由于 Databricks 不公开支持 spark-redshift lib,使用 Scala spark 从 Redshift 读取/写入 Redshift 的最佳方法是啥
Posted
技术标签:
【中文标题】由于 Databricks 不公开支持 spark-redshift lib,使用 Scala spark 从 Redshift 读取/写入 Redshift 的最佳方法是啥【英文标题】:What's the best way to read/write from/to Redshift with Scala spark since spark-redshift lib is not supported publicly by Databricks由于 Databricks 不公开支持 spark-redshift lib,使用 Scala spark 从 Redshift 读取/写入 Redshift 的最佳方法是什么 【发布时间】:2020-07-16 17:36:50 【问题描述】:我在 Scala 中有我的 Spark 项目我想使用 Redshift 作为我的数据仓库,我发现 spark-redshift repo 存在,但 Databricks 几年前将其设为私有,不再公开支持它。
目前处理 Amazon Redshift 和 Spark (Scala) 的最佳选择是什么
【问题讨论】:
【参考方案1】:这是部分答案,因为我只在实际用例中使用过 Spark->Redshift,并且从未对 Spark 读取 Redshift 性能进行基准测试。
在从 Spark 写入 Redshift 时,到目前为止,我能找到的最高效的方法是将 parquet 写入 S3,然后使用 Redshift Copy 加载数据。通过 JDBC 写入 Redshift 也可以,但它比前一种方法慢几个数量级。其他存储格式也可以尝试,但如果任何面向行的格式可以击败 Parquet,我会感到惊讶,因为 Redshift 在内部以列格式存储数据。 Spark 和 Redshift 都支持的另一种列格式是ORC。
我从未遇到过使用 Spark 从 Redshift 读取大量数据的用例,因为将所有数据加载到 Redshift 并将其用于连接和聚合感觉更自然。仅将 Redshift 用作大容量存储并使用另一个引擎进行连接和聚合可能并不划算。对于读取少量数据,JDBC 工作正常。对于大量读取,我的最佳猜测是Unload command 和 S3。
【讨论】:
是的,在我们的 python-spark 代码中,我们使用 S3 Copy 和 S3 load 来处理 Dataframe 和 Redshift,但我们发现这个 spark-redshift 库非常方便,这就是为什么我想知道是否还有其他类似的图书馆。在过去的 4-5 年里,我们一直依赖它,以上是关于由于 Databricks 不公开支持 spark-redshift lib,使用 Scala spark 从 Redshift 读取/写入 Redshift 的最佳方法是啥的主要内容,如果未能解决你的问题,请参考以下文章
Databricks 是不是为给定的集群和数据集提供推荐的 spark 参数?
使用 6.4 版扩展支持(包括 Apache Spark 2.4.5、Scala 2.11)在 azure databricks 上启动集群时出现问题
Azure Databricks:如何在 Databricks 群集中添加 Spark 配置