我的编程空间,编程开发者的网络收藏夹
学习永远不晚

大数据SparkSQl指的是什么呢

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

大数据SparkSQl指的是什么呢

这期内容当中小编将会给大家带来有关大数据SparkSQl指的是什么呢,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。SparkSql中返回的数据类型是DataFrame

1.1.1.   为什么要学习Spark SQL

我们已经学习了Hive,它是将Hive SQL转换成MapReduce然后提交到集群上执行,大大简化了编写MapReduce的程序的复杂性,由于MapReduce这种计算模型执行效率比较慢。所有Spark SQL的应运而生,它是将Spark SQL转换成RDD,然后提交到集群执行,执行效率非常快!

HIVE:简化编写MapReduce的程序的复杂性

Spark SQL转换成RDD:替代MapReduce,提高效率

Spark1.0版本开始就推出了SparkSQL,最早是叫Shark

内存列存储--可以大大优化内存使用效率,减少了内存消耗,避免了gc对大量数据的性能开销

字节码生成技术(byte-code generation)--可以使用动态字节码生成技术来优化性能

Scala代码的优化

  结构化数据是指任何有结构信息的数据。所谓结构信息,就是每条记录共用的已知的字段集合。当数据符合 这样的条件时,Spark SQL 就会使得针对这些数据的读取和查询变得更加简单高效。具体 来说,Spark SQL 提供了以下三大功能(见图 9-1)。

(1) Spark SQL 可以从各种结构化数据源(例如 JSON、Hive、Parquet 等)中读取数据。

(2) Spark SQL 不仅支持在 Spark 程序内使用 SQL 语句进行数据查询,也支持从类似商业 智能软件 Tableau 这样的外部工具中通过标准数据库连接器(JDBC/ODBC)连接 Spark SQL 进行查询。

(3) 当在 Spark 程序内使用 Spark SQL 时,Spark SQL 支持 SQL 与常规的 Python/Java/Scala 代码高度整合,包括连接 RDD 与 SQL 表、公开的自定义 SQL 函数接口等。这样一来, 许多工作都更容易实现了。

为了实现这些功能,Spark SQL 提供了一种特殊的 RDD,叫作 SchemaRDD。SchemaRDD 是存放 Row 对象的 RDD,每个 Row 对象代表一行记录。SchemaRDD 还包含记录的结构信 息(即数据字段)。SchemaRDD 看起来和普通的 RDD 很像,但是在内部,SchemaRDD 可 以利用结构信息更加高效地存储数据。此外,SchemaRDD 还支持 RDD 上所没有的一些新 操作,比如运行 SQL 查询。SchemaRDD 可以从外部数据源创建,也可以从查询结果或普 通 RDD 中创建。

什么是DataFrames

(SparkSql中返回的数据类型它在概念上等同于关系数据库中的表,但在查询上进行了优化)

与RDD类似,DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema。

1.1.1.   创建DataFrames

 在Spark SQL中SQLContext是创建DataFrames和执行SQL的入口,在spark-1.6.1中已经内置了一个sqlContext

在本地创建一个文件,有三列,分别是id、name、age,用空格分隔,然后上传到hdfs上

hdfs dfs -put person.txt /

在spark shell执行下面命令,读取数据,将每一行的数据使用列分隔符分割

val lineRDD = sc.textFile("hdfs://node01:9000/person.txt").map(_.split(" "))

3.定义case class(相当于表的schema

case class Person(id:Int, name:String, age:Int)

4.RDDcase class关联

val personRDD = lineRDD.map(x => Person(x(0).toInt, x(1), x(2).toInt))

  (里面的数据是在Array中)

5.RDD转换成DataFrame

val personDF = personRDD.toDF

对DataFrame进行处理

personDF.show

val seq1 = Seq(("1","bingbing",35),("2","yuanyuan",34),("3","mimi",33))

val rdd1 =sc.parallelize(seq1)

val df = rdd1.toDF("id","name","age")

df.show

DSL:领域特定语言

////查看DataFrame中的内容

大数据SparkSQl指的是什么呢

//查看DataFrame部分列中的内容

大数据SparkSQl指的是什么呢

大数据SparkSQl指的是什么呢

大数据SparkSQl指的是什么呢

//打印DataFrame的Schema信息

大数据SparkSQl指的是什么呢

//查询所有的name和age,并将age+1

df.select(col("id"),col("name"),col("age")+1).show

大数据SparkSQl指的是什么呢

df.select(df("id"), df("name"), df("age") + 1).show

大数据SparkSQl指的是什么呢

//过滤age大于等于18的

df.filter(col("age") >= 35).show

大数据SparkSQl指的是什么呢

//按年龄进行分组并统计相同年龄的人数

df.groupBy("age").count().show()

大数据SparkSQl指的是什么呢

SQL风格语法

//查询年龄最大的前两名

如果想使用SQL风格的语法,需要将DataFrame注册成表

df.registerTempTable("t_person")

sqlContext.sql("select * from t_person order by age desc limit 2").show

大数据SparkSQl指的是什么呢

//显示表的Schema信息

大数据SparkSQl指的是什么呢

以编程方式执行Spark SQL查询

1.编写Spark SQL查询程序

通过反射推断Schema

=======================================================

package com.qf.gp1708.day06

//通过反射获取用户信息

import org.apache.spark.rdd.RDD

import org.apache.spark.sql.{DataFrame, SQLContext}

import org.apache.spark.{SparkConf, SparkContext}

object InferSchema {

  def main(args: Array[String]): Unit = {

    val conf = new SparkConf()

      .setMaster("local")

      .setAppName("inferschema")

    val sc = new SparkContext(conf)

    val sqlContext:SQLContext = new SQLContext(sc)

  1.  //获取数据并切分

    val line = sc.textFile("C://Users/Song/Desktop/person.txt").map(_.split(","))

   3 //将获取的数据和Person样例类进行关联

    val personRdd: RDD[Godness] = line.map(arr=>Godness(arr(0).toLong,arr(1),arr(2).toInt,arr(3).toInt))

    //引入隐式转换函数,这样才可以调用到toDF方法

    import sqlContext.implicits._

   4 //将personRDD转换成DataFrame

    val dF: DataFrame = personRdd.toDF

  5.  //注册一张临时表

    dF.registerTempTable("t_person")

    val sql = "select * from t_person where fv > 70 order by age"

    //查询

    val res: DataFrame = sqlContext.sql(sql)

    res.show()

    sc.stop()

  }

}

2//创建样例类

case class Godness(id:Long,name:String,age:Int,fv:Int)

=========================================================

2.通过StructType直接指定Schema

===========================================

package com.qf.gp1708.day06

import org.apache.spark.rdd.RDD

import org.apache.spark.sql.{DataFrame, Row, SQLContext}

import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}

import org.apache.spark.{SparkConf, SparkContext}

object StructTypeSchema {

  def main(args: Array[String]): Unit = {

    val conf = new SparkConf()

      .setAppName("str")

      .setMaster("local")

    val sc = new SparkContext(conf)

    val sqlContext = new SQLContext(sc)

    //获取数据并切分

    val lines = sc.textFile("hdfs://...").map(_.split(","))

    //指定schema信息

    StructType{

      List(

        StructField("id",IntegerType,false),

        StructField("name",StringType,true),

        StructField("age",IntegerType,true),

        StructField("fv",IntegerType,true),

      )

    }

    //开始映射

    val rowRDD: RDD[Row] = lines.map(arr =>Row(arr(0).toInt,arr(1),arr(2).toInt,arr(3).toInt))

    //把RDD转换为DataFrame

    val personDF: DataFrame = sqlContext.createDataFrame(rowRDD,schema)

    //生成临时表

    personDF.registerTempTable("t_person")

    val sql = "select name,age,fv from t_person where age >30 order by age desc"

    val res = sqlContext.sql(sql)

    res.write.mode("append").json("c://out-20180903-1")

    sc.stop()

  }

}

=================================================================

1.   数据源

1.1. JDBC

Spark SQL可以通过JDBC从关系型数据库中读取数据的方式创建DataFrame,通过对DataFrame一系列的计算后,还可以将数据再写回关系型数据库中。

1.1.1.   MySQL中加载数据(Spark Shell方式)

启动Spark Shell,必须指定mysql连接驱动jar包

/usr/local/spark-1.6.1-bin-hadoop2.6/bin/spark-shell \

--master spark://node01:7077 \

--jars /usr/local/spark-1.6.1-bin-hadoop2.6/mysql-connector-java-5.1.35-bin.jar \

  (指定MySQL包)

--driver-class-path /usr/local/spark-1.6.1-bin-hadoop2.6/mysql-connector-java-5.1.35-bin.jar (指定驱动类)

从mysql中加载数据

val jdbcDF = sqlContext.read.format("jdbc").options(Map("url" -> "jdbc:mysql://node03:3306/bigdata", "driver" -> "com.mysql.jdbc.Driver", "dbtable" -> "person", "user" -> "root", "password" -> "root")).load()

执行查询

jdbcDF.show()

1.1.2.   将数据写入到MySQL中(打jar包方式)

package com.qf.gp1708.day06

import java.util.Properties

import org.apache.spark.rdd.RDD

import org.apache.spark.sql.{Row, SQLContext}

import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}

import org.apache.spark.{SparkConf, SparkContext}

object InsertData2MySQLDemo {

  def main(args: Array[String]): Unit = {

    val conf = new SparkConf().setAppName("").setMaster("local[2]")

    val sc = new SparkContext(conf)

    val sqlContext = new SQLContext(sc)

    val lines= sc.textFile("").map(_.split(","))

    //生成Schema

    val schema = StructType {

      Array(

        StructField("name", StringType, true),

        StructField("age", IntegerType, true),

        StructField("fv", StringType, true),

      )

    }

    //映射

    val personRDD = lines.map(arr =>Row(arr(1).toString,arr(2).toInt,arr(3).toInt))

    //生成DataFrame

    val personDF = sqlContext.createDataFrame(personRDD,schema)

    //生成用于写入MySQL的配置信息

    val prop = new Properties()

    prop.put("user","root")

    prop.put("password","root")

    prop.put("driver","com.mysql.jdbc.Driver")

    val jdbcUrl="jdbc:mysql://hadoop03:3306/bigdata"

    val table="person"

    //把数据写入MySQL

    personDF.write.mode("append").jdbc(jdbcUrl,table,prop)

    sc.stop()

  }

}

/usr/local/spark-1.6.3-bin-hadoop2.6/spark-submit \

--class com.qf..... \

--master spark://hadoop01:7077 \

--executor-memory 512m \

--total-executor-cores 2 \

--jars /usr/.../mysql-connector-java-5.1.35-bin.jar \

--driver-class-path /usr/.../mysql-connector-java-5.1.35-bin.jar \

/root/1.jar

=======================================================

kafka:消息中间件(缓存数据)---解耦

  为处理实时数据提供一个统一、高吞吐量、低等待的平台

  3、为什么需要消息队列(重要、了解)

  消息系统的核心作用就是三点:解耦,异步和并行

  Kafka对消息保存时根据Topic进行归类

  Topic:底层就是队列,将不同的消息放在不同的队列中进行分类

上述就是小编为大家分享的大数据SparkSQl指的是什么呢了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

大数据SparkSQl指的是什么呢

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

大数据SparkSQl指的是什么呢

这期内容当中小编将会给大家带来有关大数据SparkSQl指的是什么呢,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做Dat
2023-06-02

SparkSQL指的是什么

这篇文章主要为大家展示了“SparkSQL指的是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SparkSQL指的是什么”这篇文章吧。一、 Spark SQL介绍
2023-06-02

java八大数据类型指的是什么

本文小编为大家详细介绍“java八大数据类型指的是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“java八大数据类型指的是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。八大数据类型:1、byte(位),
2023-07-05

SSL指的是什么呢

本篇文章为大家展示了SSL指的是什么呢,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。SSL 是什么?SSL 的英文全称是 “Secure Sockets Layer” ,中文名为 “ 安全套接层协议
2023-06-04

云计算和大数据指的是什么意思

这篇文章主要介绍云计算和大数据指的是什么意思,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!云计算是指通过大量在云端的计算资源进行计算,再将结果返回给用户。大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处
2023-06-14

redis热数据指的是什么

Redis热数据指的是在Redis中频繁被访问和使用的数据。常被称为热数据的原因是因为它们经常被读取或写入,所以在Redis内存中始终处于活跃状态。这些热数据通常是应用程序中的缓存、频繁访问的数据库记录或其他需要快速访问的数据。由于热数据频
2023-08-31

大数据Atlas是什么

大数据Atlas是一种大数据管理平台,旨在帮助企业更好地管理和分析其海量数据。它提供了一套完整的数据管理工具和服务,包括数据集成、数据质量管理、数据治理、数据分析等功能。通过Atlas,企业可以更好地理解和利用其数据资产,从而提高业务决策的
大数据Atlas是什么
2024-03-07

大数据的概念是什么

本文小编为大家详细介绍“大数据的概念是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“大数据的概念是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。  随着大数据时代的到来,“大数据”已经成为互联网信息技术
2023-06-02

SAP Hybris MVC指的是什么呢

本篇文章给大家分享的是有关SAP Hybris MVC指的是什么呢,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。CRM WebUIUI上显示的数据都来自model,在CRM里就
2023-06-04

大数据时代书中的大数据是什么意思

这篇文章主要为大家展示了“大数据时代书中的大数据是什么意思”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“大数据时代书中的大数据是什么意思”这篇文章吧。“大数据时代”一书中的大数据是指“全体数据或
2023-06-29

IDC数据中心指的是什么

本篇内容主要讲解“IDC数据中心指的是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“IDC数据中心指的是什么”吧!IDC数据中心有两个非常重要的明显特征:在网络中的位置和总的网络带宽容量,它
2023-06-07

python数据分析指的是什么

这篇文章给大家分享的是有关python数据分析指的是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。python有哪些常用库python常用的库:1.requesuts;2.scrapy;3.pillow;4.
2023-06-14

uint16指的是什么数据类型

小编给大家分享一下uint16指的是什么数据类型,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!uint16是16位无符号整型;整型有无符号和有符号两种类型,在默认
2023-06-20

数据库中sno指的是什么

这篇文章主要介绍“数据库中sno指的是什么”,在日常操作中,相信很多人在数据库中sno指的是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”数据库中sno指的是什么”的疑惑有所帮助!接下来,请跟着小编一起来
2023-03-13

SAP SD的主数据指的是什么

SAP SD的主数据指的是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。SAP SD基础知识之主数据一,客户主数据客户主数据分成几大块,或者说几个层次。一般
2023-06-05

大数据是什么意思

本篇内容介绍了“大数据是什么意思”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!大数据放在现在来讲,已经有不少比较成熟的理论、方法以及工具,已
2023-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录