首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spark系列 - (3) Spark SQL

为了实现与Hive兼容,Shark在HiveQL方面重用了Hive中HiveQL的解析、逻辑执行计划、执行计划优化等逻辑;可以近似认为仅将物理执行计划从MapReduce作业替换成了Spark作业,通过...而右侧的DataFrame却提供了详细的结构信息,使得Spark SQL 可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。 DataFrame是为数据提供了Schema的视图。...Dataframe 是 Dataset 的特列,DataFrame=Dataset[Row] ,所以可以通过 as 方法将 Dataframe 转换为 Dataset。...,支持代码自动优化 DataFrame与DataSet的区别 DataFrame: DataFrame每一行的类型固定为Row,只有通过解析才能获取各个字段的值, 每一列的值没法直接访问。...Logical Plan通过Analyzer模块借助于Catalog中的表信息解析为Logical Plan;此时,Optimizer再通过各种基于规则的优化策略进行深入优化,得到Optimized

43110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Spark Structured Streaming 使用总结

    Dataframe,可理解为无限表格 [cloudtrail-unbounded-tables.png] 转化为Dataframe我们可以很方便地使用Spark SQL查询一些复杂的结构 val cloudtrailEvents...这里我们为StreamingQuery指定以下配置: 从时间戳列中导出日期 每10秒检查一次新文件(即触发间隔) 将解析后的DataFrame中的转换数据写为/cloudtrail上的Parquet格式表...例如,Parquet和ORC等柱状格式使从列的子集中提取值变得更加容易。基于行的存储格式(如Avro)可有效地序列化和存储提供存储优势的数据。然而,这些优点通常以灵活性为代价。...星号(*)可用于包含嵌套结构中的所有列。...我们在这里做的是将流式DataFrame目标加入静态DataFrame位置: locationDF = spark.table("device_locations").select("device_id

    9.1K61

    Spark SQL

    Shark即Hive on Spark,为了实现与Hive兼容,Shark在HiveQL方面重用了Hive中HiveQL的解析、逻辑执行计划翻译、执行计划优化等逻辑,可以近似认为仅将物理执行计划从MapReduce...Shark的设计导致了两个问题: 一是执行计划优化完全依赖于Hive,不方便添加新的优化策略 二是因为Spark是线程级并行,而MapReduce是进程级并行,因此,Spark在兼容Hive的实现上存在线程安全问题...RDD是分布式的 Java对象的集合,但是,对象内部结构对于RDD而言却是不可知的 DataFrame是一种以RDD为基础的分布式数据集,提供了详细的结构信息。...如图所示为RDD和DataFrame的区别。...中创建一个DataFrame,名称为peopleDF,把peopleDF保存到另外一个JSON文件中,然后,再从peopleDF中选取一个列(即name列),把该列数据保存到一个文本文件中。

    8210

    DataFrame和Dataset简介

    一、Spark SQL简介 Spark SQL 是 Spark 中的一个子模块,主要用于操作结构化数据。...它具有以下特点: 能够将 SQL 查询与 Spark 程序无缝混合,允许您使用 SQL 或 DataFrame API 对结构化数据进行查询; 支持多种开发语言; 支持多达上百种的外部数据源,包括 Hive...二、DataFrame & DataSet 2.1 DataFrame 为了支持结构化数据的处理,Spark SQL 提供了新的数据结构 DataFrame。...在 Spark 2.0 后,为了方便开发者,Spark 将 DataFrame 和 Dataset 的 API 融合到一起,提供了结构化的 API(Structured API),即用户可以通过一套标准的...这也就是为什么在 Spark 2.0 之后,官方推荐把 DataFrame 看做是 DatSet[Row],Row 是 Spark 中定义的一个 trait,其子类中封装了列字段的信息。

    2.2K10

    2021年大数据Spark(三十二):SparkSQL的External DataSource

    方法底层还是调用text方法,先加载数据封装到DataFrame中,再使用as[String]方法将DataFrame转换为Dataset,实际中推荐使用textFile方法,从Spark 2.0开始提供...中,需要解析提取字段的值。...(5,truncate = true)     // TODO:使用SparkSQL自带函数,针对JSON格式数据解析的函数     import org.apache.spark.sql.functions...默认值为false,如果数据文件首行是列名称,设置为true  3)、是否自动推断每个列的数据类型:inferSchema 默认值为false,可以设置为true 官方提供案例: 当读取CSV/...中读取MySQL表的数据通过JdbcRDD来读取的,在SparkSQL模块中提供对应接口,提供三种方式读取数据:  方式一:单分区模式  方式二:多分区模式,可以设置列的名称,作为分区字段及列的值范围和分区数目

    2.3K20

    【Spark研究】用Apache Spark进行大数据处理第二部分:Spark SQL

    在这一文章系列的第二篇中,我们将讨论Spark SQL库,如何使用Spark SQL库对存储在批处理文件、JSON数据集或Hive表中的数据执行SQL查询。...这一版本中包含了许多新的功能特性,其中一部分如下: 数据框架(DataFrame):Spark新版本中提供了可以作为分布式SQL查询引擎的程序化抽象DataFrame。...通过调用将DataFrame的内容作为行RDD(RDD of Rows)返回的rdd方法,可以将DataFrame转换成RDD。...可以在用HiveQL解析器编写查询语句以及从Hive表中读取数据时使用。 在Spark程序中使用HiveContext无需既有的Hive环境。...下一篇文章中,我们将讨论可用于处理实时数据或流数据的Spark Streaming库。

    3.3K100

    大数据技术Spark学习

    在 SparkSQL 中 Spark 为我们提供了两个新的抽象,分别是 DataFrame 和 DataSet。他们和 RDD 有什么区别呢?...spark.stop()   } } 第3章 Spark SQL 解析 3.1 新的起始点 SparkSession 在老的版本中,SparkSQL 提供两种 SQL 查询起始点,一个叫 SQLContext...在分区的表内,数据通过分区列将数据存储在不同的目录下。Parquet 数据源现在能够自动发现并解析分区信息。...如果想关闭该功能,直接将该参数设置为 disabled。此时,分区列数据格式将被默认设置为 String 类型,不再进行类型解析。...SQL 可以通过 JDBC 从关系型数据库中读取数据的方式创建 DataFrame,通过对 DataFrame 一系列的计算后,还可以将数据再写回关系型数据库中。

    5.3K60

    数据分析EPHS(2)-SparkSQL中的DataFrame创建

    本篇是该系列的第二篇,我们来讲一讲SparkSQL中DataFrame创建的相关知识。 说到DataFrame,你一定会联想到Python Pandas中的DataFrame,你别说,还真有点相似。.../test.json") df.show() } 结果为: ?...4、总结 今天咱们总结了一下创建Spark的DataFrame的几种方式,在实际的工作中,大概最为常用的就是从Hive中读取数据,其次就可能是把RDD通过toDF的方法转换为DataFrame。...spark.sql()函数中的sql语句,大部分时候是和hive sql一致的,但在工作中也发现过一些不同的地方,比如解析json类型的字段,hive中可以解析层级的json,但是spark的话只能解析一级的...json(这是我在工作中的发现,也可能不太对,大家可以自己尝试一下)。

    1.6K20

    我是一个DataFrame,来自Spark星球

    本篇是该系列的第二篇,我们来讲一讲SparkSQL中DataFrame创建的相关知识。 说到DataFrame,你一定会联想到Python Pandas中的DataFrame,你别说,还真有点相似。.../test.json") df.show() } 结果为: ?...4、总结 今天咱们总结了一下创建Spark的DataFrame的几种方式,在实际的工作中,大概最为常用的就是从Hive中读取数据,其次就可能是把RDD通过toDF的方法转换为DataFrame。...spark.sql()函数中的sql语句,大部分时候是和hive sql一致的,但在工作中也发现过一些不同的地方,比如解析json类型的字段,hive中可以解析层级的json,但是spark的话只能解析一级的...json(这是我在工作中的发现,也可能不太对,大家可以自己尝试一下)。

    1.7K20

    原 荐 SparkSQL简介及入门

    SparkSQL简介及入门 一、概述     Spark为结构化数据处理引入了一个称为Spark SQL的编程模块。...另外,使用这种方式,每个数据记录产生一个JVM对象,如果是大小为200GB的数据记录,堆栈将产生1.6亿个对象,这么多的对象,对于GC来说,可能要消耗几分钟的时间来处理(JVM的垃圾收集时间与堆栈中的对象数量呈线性相关...显然这种内存存储方式对于基于内存计算的spark来说,很昂贵也负担不起) 2、SparkSql的存储方式     对于内存列存储来说,将所有原生数据类型的列采用原生数组来存储,将Hive支持的复杂数据类型...比如说某列数据类型为整型(int),那么它的数据集合一定是整型数据。这种情况使数据解析变得十分容易。...三、SparkSQL入门     SparkSql将RDD封装成一个DataFrame对象,这个对象类似于关系型数据库中的表。

    2.5K60

    SparkSQL极简入门

    欢迎您关注《大数据成神之路》 Spark为结构化数据处理引入了一个称为Spark SQL的编程模块。...另外,使用这种方式,每个数据记录产生一个JVM对象,如果是大小为200GB的数据记录,堆栈将产生1.6亿个对象,这么多的对象,对于GC来说,可能要消耗几分钟的时间来处理(JVM的垃圾收集时间与堆栈中的对象数量呈线性相关...显然这种内存存储方式对于基于内存计算的spark来说,很昂贵也负担不起) 2、SparkSql的存储方式 对于内存列存储来说,将所有原生数据类型的列采用原生数组来存储,将Hive支持的复杂数据类型(如array...比如说某列数据类型为整型(int),那么它的数据集合一定是整型数据。这种情况使数据解析变得十分容易。...SparkSql将RDD封装成一个DataFrame对象,这个对象类似于关系型数据库中的表。 1、创建DataFrame对象 DataFrame就相当于数据库的一张表。

    3.9K10

    独家 | PySpark和SparkSQL基础:如何利用Python编程执行Spark(附代码)

    接下来将举例一些最常用的操作。完整的查询操作列表请看Apache Spark文档。...5.5、“substring”操作 Substring的功能是将具体索引中间的文本提取出来。在接下来的例子中,文本从索引号(1,3),(3,6)和(1,6)间被提取出来。...5) 分别显示子字符串为(1,3),(3,6),(1,6)的结果 6、增加,修改和删除列 在DataFrame API中同样有数据处理函数。...('new_column', F.lit('This is a new column')) display(dataframe) 在数据集结尾已添加新列 6.2、修改列 对于新版DataFrame API...and logical dataframe.explain(4) 8、“GroupBy”操作 通过GroupBy()函数,将数据列根据指定函数进行聚合。

    13.7K21
    领券