云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

百度云_数据库视频_安全稳定

小七 141 0

ApacheSpark1.3中Spark SQL的新增功能

apachespark1.3版本是sparksql的一个重要里程碑。除了几个主要功能,我们非常兴奋地宣布,该项目已经正式毕业于阿尔法,在一年前刚刚推出。在这篇博客文章中,我们将详细讨论这一步对兼容性的影响,并重点介绍该版本的一些主要特性。从阿尔法毕业虽然我们知道许多组织(包括Databricks的所有客户)已经开始在生产中使用sparksql,但是Alpha的升级为使用这个组件的构建应用程序带来了稳定性的保证。与Spark堆栈的其他部分一样,我们现在承诺通过ApacheSpark1.X发行版系列为所有公共接口提供二进制兼容性。由于SQL语言本身以及我们与apachehive的交互代表了一个非常大的接口,我们也希望借此机会阐明我们对项目将如何继续发展的设想。作为一个主要的SQL存储单元,大量的SQL工作负载仍将依赖于SQL配置单元中的迁移更具体地说,HiveContext提供的HiveQL接口仍然是我们支持的最完整的SQL方言,我们承诺继续保持与该接口的兼容性。在某些地方,我们的语义与Hive(即SPARK-5680)的语义略有不同,我们继续致力于提供Hive功能的超集。此外,虽然我们对通过改进的原生数据源API(见下文更多)提供的所有新数据源感到兴奋,但我们将继续支持使用Hive的SerDes从Hive Metastore读取表。新的dataframesapi(也将在下面讨论)目前被标记为实验性的。因为这是这个新接口的第一个版本,所以我们希望有机会在这个API固定下来之前获得用户的反馈。也就是说,我们预计不会对数据帧进行任何重大的突破性更改,并希望从apachespark1.4中的sparksql的这一部分删除实验性标记。您可以在SPARK-6116上跟踪进度并报告任何问题。改进的数据源API数据源API是这个版本的另一个主要焦点,它提供了一个使用sparksql加载和存储数据的接口。除了apachespark发行版预先打包的源代码外,这个API还为外部开发人员提供了一个集成点,以添加对自定义数据源的支持。在Databricks,我们已经为读取apacheavro或CSV中存储的数据提供了库,我们期待着社区中其他人的贡献(查看spark包以获得当前可用源的完整列表)。统一加载/保存接口在这个版本中,我们为SQLContext和DataFrame添加了一个统一的接口,用于使用内置和外部数据源加载和存储数据。这些函数提供了一种加载和存储数据的简单方法,与您是用Python、Scala、Java、R还是SQL编写无关。下面的例子展示了从Avro加载数据并将其转换成不同语言的parquet是多么容易。斯卡拉值df=sqlContext.load("/家/迈克尔/数据.avro", "com.databricks.spark网站.avro")数据框保存("/家/迈克尔/实木地板","拼花地板")蟒蛇df=sqlContext.load("/家/迈克尔/数据.avro", "com.databricks.spark网站.avro")数据框保存("/家/迈克尔/实木地板","拼花地板")Java数据帧df=sqlContext.load("/家/迈克尔/数据.avro", "com.databricks.spark网站.avro")数据框保存("/家/迈克尔/实木地板","拼花地板")SQL语言>创建表avroData使用com.databricks.spark网站.avro公司选项(路径"/家/迈克尔/数据.avro")>创建表parquetData使用镶木地板选项(路径"/home/michael/data/parquet")从avroData选择*Parquet的自动分区发现和模式迁移Parquet一直是sparksql支持的最快的数据源之一。使用其列格式,对parquet表的查询可以通过避免读取不需要的数据的成本而快速执行。在apachespark1.3版本中,我们向这个源代码添加了两个主要特性。首先,在parquet中存储大量数据的组织经常会发现,随着时间的推移,他们通过添加或删除列来改进模式。在这个版本中,我们添加了一个新特性,它将扫描所有文件的元数据,合并模式以获得数据的统一表示。此功能允许开发人员读取模式超时更改的数据,而无需执行昂贵的手动转换。此外,parquet数据源现在支持自动发现已划分到文件夹中的数据,然后根据针对该数据的查询中的谓词修剪要扫描的文件夹。这种优化意味着,只需将数据拆分到文件夹中,就可以大大加快may查询的速度。例如:/数据/年=2014年/文件.parquet/数据/年=2015年/文件.parquet...从表中选择*年=2015年在apachespark1.4中,我们计划提供一个接口,允许其他格式(如ORC、JSON和CSV)利用这种分区功能。持久数据源表apachespark1.3中添加的另一个特性是能够将关于sparksql数据源表的元数据持久化到配置单元元存储区。这些表允许多个用户以方便的方式共享有关数据所在位置的元数据。数据源表可以与本机配置单元表共存,也可以由sparksql读取。从JDBC源读取最后,添加了一个从JDBC读取的数据源,作为sparksql的内置源。使用这个库,sparksql可以从任何支持JDBC的现有关系数据库中提取数据。示例包括mysql、postgres、H2等等。从其中一个系统读取数据就像创建一个指向外部表的虚拟表一样简单。然后,可以轻松地读入该表中的数据,并将其与sparksql支持的任何其他源联接起来。>创建临时表印象使用org.apache.spark网站.sql.jdbc选项(网址"jdbc:postgresql:dbserver",dbtable"印象")>从印象中选择计数(*)这个功能比Spark早期对JDBC(即JdbcRDD)的支持有了很大的改进。与纯RDD实现不同,这个新的数据源支持自动下推谓词,将数据转换为可以轻松连接的数据帧,并且除了Scala之外,还可以从Python、Java和SQL访问。引入数据帧虽然我们已经在其他博客文章和Spark Summit East上讨论过数据帧,但是任何关于ApacheSpark1.3的帖子如果不提到这个重要的新API,那就太失职了。数据帧发展了Spark的RDD模型,通过提供在大型数据集上过滤、聚合和投影的简化方法,Spark开发人员可以更快更轻松地处理结构化数据。我们的数据帧实现受Pandas和R的数据帧的启发,并且与这些实现完全互操作。此外,Spark的Java、Scala和PythonAPI以及即将推出的(未发布的)R API中也提供了Spark SQL数据帧。在内部,dataframe利用Catalyst查询优化器智能地规划大数据分析的执行。这种规划一直渗透到物理存储中,在物理存储中,根据用户程序的分析应用诸如谓词下推之类的优化。由于此计划是在逻辑级别上进行的,因此优化甚至可以跨函数调用进行,如下例所示。在本例中,sparksql能够通过join按用户的位置进行过滤,从而大大降低了执行成本。即使add_demographics函数的原始作者没有提供指定如何过滤用户的参数,这种优化还是可能的!这是sparksql数据帧如何通过提供简单的接口和强大的优化来提高开发人员效率的唯一例子。 要了解更多关于sparksql、Dataframes或apachespark1.3,请查看apachespark网站上的SQL编程指南。敬请关注此博客,了解ApacheSpark1.3版本的其他组件的更新!免费试用Databricks。今天就开始吧