spark sql提供了更快的查询性能,如何能够更快的体验,开发和调试spark sql呢?按照正规的步骤我们一般会集成hive,然后使用hive的元数据查询hive表进行操作,这样以来我们还需要考虑跟hive相关的东西,如果我们仅仅是学习spark sql查询功能,那么仅仅使用IDEA的IDE环境即可,而且能够在win上快速体验,不需要hive数据仓库,我们直接使用数组造点数据,然后转成DF,最后直接使用spark sql操作即可。
首先,看下pom文件的核心依赖:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.11</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.11.8</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.1.0</version>
</dependency>
然后看一个例子spark sql的测试例子:
import org.apache.spark.sql.SparkSession
/**
* spark sql本地测试例子
*/
object TestGroup {
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder().master("local[1]")//设置loca模式
.appName("Spark SQL basic example")//设置app的名字
.getOrCreate()
import spark.implicits._//导入隐式的转化函数
import spark.sql //导入sql函数
//使用Seq造数据,三列数据
val df = spark.sparkContext.parallelize(Seq((0,"p",30.9),
(0,"u",22.1),
(1,"r",19.6),
(2,"cat40",20.7),
(2,"cat187",27.9),
(2,"cat183",11.3),
(3,"cat8",35.6))).toDF("id", "name", "price")//转化df的三列数据s
df.createTempView("pro")//创建表明为pro
//按照id分组,统计每组数量,统计每组里面最小的价格,然后收集每组里面的数据
val ds=sql("select id, count(*) as c,min(price) as min_price,
collect_list(struct(name, price)) as res from pro group by id ");
ds.cache() //需要多次查询的数据,可以缓存起来
//获取查询的结果,遍历获取结果集
ds.select("id","c","res","min_price").collect().foreach(line=>{
import org.apache.spark.sql.Row//导入Row对象
val id=line.getAs[Int]("id")//获取id
val count=line.getAs[Long]("c")//获取数量
val min_price=line.getAs[Double]("min_price")//获取最小的价格
val value=line.getAs[Seq[Row]]("res")//获取每组内的数据集合,注意是一个Row实体
println(id+" "+count+" "+" "+min_price)//打印数据
value.foreach(row=>{//遍历组内数据集合,然后打印
println(row.getAs[String]("name")+" "+row.getAs[Double]("price"))
})
})
spark.stop()
}
}
至此,一个涵盖spark sql比较全的功能例子的小工程就完成了,上面的代码直接可在win上运行,而且里面的数据随时自己添加删除,以便于可以测试spark sql与预期效果对比,上面的sql中还用到了分组里面的高级用法,分组后,收集组内数据,注意组内数据收集,如果是单个字段,直接用collect_list或者collect_set即可,但是如果是多个字段,这个时候必须用到struct类型了,最终转化后的类型就是row的集合,里面的每个结构体会被转成一个row对象,一个组的数据,就是List<Row>了,最终可以在代码里面遍历取出。spark sql结合scala编程语言之后可以变得非常灵活,sql不擅长的就用编程语言解决的,sql擅长的就用sql方便快速得到数据,用起来非常干净清爽!
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
技术债不能欠,健康债更不能欠, 求道之路,与君同行。
分享到:
相关推荐
在这个版本中,开发者可以体验到更加成熟的SQL支持、更强大的机器学习库MLlib以及更加完善的流处理引擎Spark Streaming。 1. Spark Core:作为Spark的基础组件,Spark Core负责任务调度、内存管理、故障恢复和与...
SparkSQL是Apache Spark项目的一部分,它将SQL查询语言与Spark的强大计算能力相结合,使得数据分析师和开发人员能够更方便地处理结构化和半结构化数据。 1. **SparkSQL简介** SparkSQL允许用户通过SQL或DataFrame ...
2. **Spark Shell**:Spark提供了一个交互式的Shell,允许开发者在命令行环境中快速测试和调试Spark程序,这极大地方便了开发和学习过程。 3. **DataFrame和Dataset API**:DataFrame是Spark SQL的基础,它是Spark...
5. **交互式Shell**:Spark提供了一个名为`spark-shell`的交互式环境,方便开发人员测试和调试代码。 **Spark与Hadoop 3.2的兼容性** Hadoop 3.2引入了许多新特性,如: 1. **多命名空间**:支持多个HDFS命名空间...
Apache Spark是由加州大学伯克利分校的AMPLab开发,是基于内存计算的分布式数据处理系统,它旨在提供快速、通用、可扩展的大数据分析。世纪佳缘研发中心总监吴金龙在其介绍中特别强调了Spark的两个模块:Mllib和...
4. **Spark Shell**:一个交互式环境,用于测试和调试Spark程序,可以快速体验Spark的基本功能。 5. **Stage和Task**:Spark作业被拆分成Stage,每个Stage由多个Task组成,Task是执行在Executor上的最小单位。 6. ...
示例代码可以帮助初学者快速上手,了解如何在实践中运用SparkR进行大数据分析。 总的来说,SparkR 3.2.1是Apache Spark与R语言结合的产物,它提供了在R环境中进行大规模数据处理的能力。这个版本不仅强化了Spark的...
- **本地运行**:可以在Linux、Windows或IDE环境下运行Spark程序,适合调试和小规模测试。 - **分布式运行**:通过将程序提交到集群上实现分布式执行。 - **Standalone集群**:Spark自带的资源调度系统,简单易用。...
8. **Spark Shell**:提供了一个交互式环境,用户可以直接在Shell中编写和执行Spark代码,便于测试和调试。 在Spark 2.3.1版本中,值得注意的新特性和改进包括: 1. **DataFrame和Dataset性能优化**:引入了更高效...
- 选择一些经典书籍,如《Hadoop权威指南》、《Spark快速上手》等,深入学习特定领域的知识和技术。 综上所述,通过遵循上述步骤,您可以系统地学习Hadoop和Spark的相关知识,并逐渐成为一名熟练的用户。在实践中...
Spark的核心组件包括Spark Core、Spark SQL、Spark Streaming和MLlib等,其中Spark Core负责基础任务调度,Spark SQL用于结构化数据处理,Spark Streaming则处理连续的数据流,而MLlib则提供了机器学习算法支持。...
随着Scala语言的不断进化,Spark 2.4开始支持最新的Scala 2.12版本,这为开发者提供了更现代的编程体验,同时也保持了向后兼容性。 这些更新展示了Apache Spark团队致力于持续改进其框架,以适应不断变化的大数据...
本毕设项目旨在构建一个基于Spark框架的商品大数据实时推荐系统,旨在为用户提供个性化、实时的商品推荐,提升用户购物体验和平台销售效率。 Spark作为一款强大的大数据处理框架,以其高效、灵活和易用的特性,被...
然而,直接使用Spark进行模型训练存在一些挑战,如入门难度较高、环境配置复杂、调试困难等问题,特别是对于缺乏工程背景的数据科学家来说更为明显。 ### 算法平台设计目标 为了降低数据科学家使用Spark进行模型...
它支持批处理、交互式查询(如Spark SQL)、流处理(如Spark Streaming)和机器学习等多种计算模型。在本项目中,Spark被用来处理大规模数据,实现推荐算法的快速执行。 2. **实时推荐系统**:实时推荐系统能够根据...
《Spark大数据技术与应用》是...通过实验,可以亲身体验如何定义RDD、创建DataFrame,如何编写Spark SQL查询,如何处理实时流数据,以及如何应用机器学习算法等。这些实践经验将深化理论知识的理解,增强实际开发技能。
- Spark的核心理念是速度、易用性和通用性,它在内存计算方面有显著优势,能够快速处理大规模数据。 - Spark支持多种工作负载,包括批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)和图形处理...
然而,Spark的学习曲线较陡,环境配置复杂,调试困难,且缺乏直观的操作界面,使得非工程背景的科学家难以有效利用。 2. **平台功能**: - **模型训练**:用户可以通过拖拽模块的方式构建模型训练流程,无需编写...
同时,Spark提供了交互式的解释执行接口,方便用户进行调试和学习。 从代码实现的角度来看,Spark的核心数据结构是RDD(Resilient Distributed Dataset),即弹性分布式数据集。RDD是不可变的,按分区组织的数据...
总的来说,Spark-foundation:task1_Student旨在帮助初学者理解Spark如何处理结构化数据,并通过实际操作体验Spark的高效和便捷。结合Jupyter Notebook,学习者可以轻松地实践并掌握Spark SQL的基本操作,为更深入的...