使用IDEA工具练习SparkSql

前言

Spark SQL是Spark用来处理结构化数据的一个模块,它提供了2个编程抽象:DataFrame和DataSet,并且作为分布式SQL查询引擎的作用。

Spark SQL的特点:

1)易整合;
2)统一的数据访问方式;
3)兼容Hive;
4)标准的数据连接。

DataFrame的介绍:

DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema;
Spark SQL记录数据的结构信息,即schema;
同时,与Hive类似,DataFrame也支持嵌套数据类型(struct、array和map)。

DataSet的介绍:

DataFrame只是知道字段(类型),但是不知道字段的类型;
但是DataSet不仅仅知道字段,而且知道字段类型,
样例类被用来在Dataset中定义数据的结构信息,样例类中每个属性的名称直接映射到DataSet中的字段名称;

RDD、DataFrame、DataSet三者之间的转化:

		RDD -> Dataset 
			val ds = rdd.toDS()
		RDD -> DataFrame 
			val df = spark.read.json(rdd)
		Dataset -> RDD
			val rdd = ds.rdd
		Dataset -> DataFrame
			val df = ds.toDF()
		DataFrame -> RDD
			val rdd = df.toJSON.rdd
		DataFrame -> Dataset
			val ds=df.as[类型]

案例:

项目目录:

在这里插入图片描述

利用IDEA工具编写WordCount:

 //使用开发工具完成 Spark 的wordcount的开发
    //local模式
    //创建SparkConf对象
    //设置Spark计算框架 的运行环境   local[*]本地
    val config: SparkConf = new SparkConf().setMaster("local[*]").setAppName("wordCount")
    //创建Spark上下文对象
     val sc = new  SparkContext(config)
    //读取文件,将文件内容一行一行读取出来
    val lines: RDD[String] = sc.textFile("input/")    //input下的两个文件
    //将一行一行数据分解一个一个的单词
    val words: RDD[String] = lines.flatMap(_.split(" "))
    //为了统计方便  将单词的数据结果进行结构的转换
   val wordToOne: RDD[(String, Int)] = words.map((_, 1))
    //对转换结构后的数据进行聚合
    val wordToSum: RDD[(String, Int)] = wordToOne.reduceByKey(_+_)
    //将统计结果采集出来
    val result: Array[(String, Int)] = wordToSum.collect()
    //将结果打印
    //println(result)
    result.foreach(println)

程序运行结果:

20/02/22 23:38:20 INFO DAGScheduler: Job 0 finished: collect at SparkWordCount.scala:25, took 0.382258 s
(scala,1)
(word,1)
(hello,2)
20/02/22 23:38:20 INFO SparkContext: Invoking stop() from shutdown hook

用IDEA工具使用SparkSql:

  def main(args: Array[String]): Unit = {
   
    /
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值