通过spark-redshift工具包读取redshift上的表

spark数据源API在spark1.2以后,开始提供插件诗的机制,并与各种结构化数据源整合。spark 用户可以读取各种各样数据源的数据,比如Hive表、JSON文件、列式的Parquet表、以及其他表。通过spark包可以获取第三方数据源。
而这篇文章主要讨论spark 新的数据源,通过spark-redshift包,去访问Amazon Redshift服务。
spark-redshift 包主要由Databricks以及来自SwiftKey社区贡献者和其他公司维护。
在诞生 spark-redshift之前,spark JDBC数据源是唯一可以访问Redshift库。这种方式在查询非常少的数据(比如100条)的情况下是非常适合的,但是如果用于处理大规模数据,将会变得非常慢!这是因为JDBC提供基于ResultSet方法,使用单线程获取小批量数据。
此外,如果使用JDBC在Redshift中存储大规模的数据集,唯一可行的方式就是在Redshift中同一个数据库中进行。基于JDBC的INSERT/UPDATE查询也仅仅适合小规模的数据。对于那些想在Redshift中加载或者存储大规模数据的用户来说,JDBC实在是有太多的性能和吞吐量问题亟待改变。
然而使用spark-redshift可以简化和Redshift整合的步骤,使得我们可以从Redshift中加载或者存储大规模的数据。为了了解它是怎么工作的,让我们来看看如何用Redshift数据库来和其他的数据源的数据集进行集成。
我们还将在本文探讨spark-redshift是如何扩展的。一般情况下,数据需要从HDFS上移到Redshift中进行分析。然而spark-redshift将允许Redshift无缝地操作(通过统一的数据源API)存储在S3、Hive tables、CSV或者存储在HDFS上的Parquet文件。这将使得ETL工作变得简单,用户只需要将注意力放在业务逻辑上,而且这提供了统一的系统视图。

从Redshift读取数据

假如你想要使用spark处理一张完整表(或查询返回大规模数据行),与另一个大数据集比如是hive数据源整合。如下是使用Redshift表查询数据,然后转成DataFrame操作:

val jdbcURL =  """jdbc:redshift://test-redshift.czac2vcs84ci.
                  us-east-.redshift.amazonaws.com:5439/
                  test

你可能感兴趣的:(spark,spark,redshift,parquet,api,数据)