前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >以编程方式执行Spark SQL查询的两种实现方式

以编程方式执行Spark SQL查询的两种实现方式

作者头像
天策
发布于 2018-06-22 06:53:34
发布于 2018-06-22 06:53:34
2.3K00
代码可运行
举报
文章被收录于专栏:行者悟空行者悟空
运行总次数:0
代码可运行

摘 要

在自定义的程序中编写Spark SQL查询程序

1.通过反射推断Schema
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.itunic.sql

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

/**
  * Created by itunic.com on 2017/1/2.
  * Spark SQL
  * 通过反射推断Schema
  * by me:
  * 我本沉默是关注互联网以及分享IT相关工作经验的博客,
  * 主要涵盖了操作系统运维、计算机编程、项目开发以及系统架构等经验。
  * 博客宗旨:把最实用的经验,分享给最需要的你,
  * 希望每一位来访的朋友都能有所收获!
  *
  */
object InferringSchema {
  def main(args: Array[String]): Unit = {
 //创建SparkConf()并设置App名称
    val conf = new SparkConf().setAppName("InferringSchema").setMaster("local")
 //SQLContext要依赖SparkContext
    val sc = new SparkContext(conf)
 //创建SQLContext
    val sqlContext = new SQLContext(sc)
 //从指定的地址创建RDD
    val lineRdd = sc.textFile("F:\\test\\input\\wc.txt").map(f => {
      val fields = f.split("\t")
 //将RDD和case class关联
      Person(fields(0).toLong, fields(1), fields(2).toInt)
    })
 //导入隐式转换,如果不导入无法将RDD转换成DataFrame
 //将RDD转换成DataFrame
 import sqlContext.implicits._
    val personDF = lineRdd.toDF
 //注册表
    personDF.registerTempTable("t_person")
 //传入SQL
    val df = sqlContext.sql("select * from t_person order by age desc limit 2")
 //显示
    df.show()
 //以json方式写入hdfs
 //df.write.json("hdfs://ns1:9000/wc")
    sc.stop()
  }
}

//定义样例类
case class Person(id: Long, userName: String, age: Int)
2.通过StructType直接指定Schema
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.itunic.sql

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.{Row, SQLContext}
import org.apache.spark.sql.types._

/**
  * Created by itunic.com on 2017/1/2.
  *  Spark SQL
  * 通过StructType直接指定Schema
  * by me:
  * 我本沉默是关注互联网以及分享IT相关工作经验的博客,
  * 主要涵盖了操作系统运维、计算机编程、项目开发以及系统架构等经验。
  * 博客宗旨:把最实用的经验,分享给最需要的你,
  * 希望每一位来访的朋友都能有所收获!
  *
  */
object SpecifyingSchema {
  def main(args: Array[String]): Unit = {
 //创建SparkConf()并设置App名称
    val conf = new SparkConf().setAppName("SpecifyingSchema").setMaster("local")
 //SQLContext要依赖SparkContext
    val sc = new SparkContext(conf)
 //创建SQLContext
    val sqlContext = new SQLContext(sc)
 //通过StructType直接指定每个字段的schema
    val schema = StructType(
      List(
        StructField("id", LongType, true),
        StructField("name", StringType, true),
        StructField("age", IntegerType, true)
      )
    )

    val lineRdd = sc.textFile("F:\\test\\input\\wc.txt").map(f => {
      val fields = f.split("\t")
      Row(fields(0).toLong, fields(1), fields(2).toInt)
    })
 //将schema信息应用到lineRdd上
    val personDF = sqlContext.createDataFrame(lineRdd, schema)
    personDF.registerTempTable("t_person")
 //传入SQL
    val df = sqlContext.sql("select * from t_person order by age desc limit 2")
 //显示
    df.show()
 //以json方式写入hdfs
 //df.write.json("hdfs://ns1:9000/wc")
    sc.stop()
  }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年01月02日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
2.sparkSQL--DataFrames与RDDs的相互转换
    当已知类的Schema的时候,使用这种基于反射的方法会让代码更加简洁而且效果也很好。
intsmaze-刘洋
2018/08/29
4470
2.sparkSQL--DataFrames与RDDs的相互转换
【Spark篇】---SparkSQL初始和创建DataFrame的几种方式
          Hive是Shark的前身,Shark是SparkSQL的前身,SparkSQL产生的根本原因是其完全脱离了Hive的限制。
LhWorld哥陪你聊算法
2018/09/13
2.7K0
【Spark篇】---SparkSQL初始和创建DataFrame的几种方式
Spark——底层操作RDD,基于内存处理数据的计算引擎
Apache Spark是一个快速的通用集群计算框架 / 殷勤。它提供Java,Scala,Python和R中的高级API,以及支持常规执行图的优化引擎。它还支持一组丰富的更高级别的工具,包括Spark SQL用于SQL和结构化数据的处理,MLlib机器学习,GraphX用于图形处理和Spark Streaming. 。 作为Apache的顶级项目之一, 它的官网为 http://spark.apache.org
时间静止不是简史
2020/07/27
2.5K0
Spark——底层操作RDD,基于内存处理数据的计算引擎
大数据随记 —— DataFrame 与 RDD 之间的相互转换
在 Spark SQL 中有两种方式可以在 DataFrame 和 RDD 中进行转换:
繁依Fanyi
2023/05/07
1.2K0
大数据随记 —— DataFrame 与 RDD 之间的相互转换
【Spark篇】---SparkSQL中自定义UDF和UDAF,开窗函数的应用
SparkSQL中的UDF相当于是1进1出,UDAF相当于是多进一出,类似于聚合函数。
LhWorld哥陪你聊算法
2018/09/13
1.9K0
【Spark篇】---SparkSQL中自定义UDF和UDAF,开窗函数的应用
SparkSQL快速入门系列(6)
上一篇《SparkCore快速入门系列(5)》,下面给大家更新一篇SparkSQL入门级的讲解。
刘浩的BigDataPath
2021/04/13
2.4K0
SparkSQL快速入门系列(6)
将SparkSQL计算结果写入Mysql中
编写代码 package com.itunic.sql import java.util.Properties import org.apache.spark.sql.{Row, SQLContext} import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType} import org.apache.spark.{SparkConf, SparkContext} /**   * Create
天策
2018/06/22
3.2K0
Spark(1.6.1) Sql 编程指南+实战案例分析
首先看看从官网学习后总结的一个思维导图 概述(Overview) Spark SQL是Spark的一个模块,用于结构化数据处理。它提供了一个编程的抽象被称为DataFrames,也可以作为分布式SQ
汤高
2018/01/11
2.5K0
Spark(1.6.1) Sql 编程指南+实战案例分析
2021年大数据Spark(二十五):SparkSQL的RDD、DF、DS相关操作
Spark 2.0开始,SparkSQL应用程序入口为SparkSession,加载不同数据源的数据,封装到DataFrame/Dataset集合数据结构中,使得编程更加简单,程序运行更加快速高效。
Lansonli
2021/10/09
1.4K0
SparkSql学习笔记一
1.简介     Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。     为什么要学习Spark SQL?     我们已经学习了Hive,它是将Hive SQL转换成MapReduce然后提交到集群上执行,大大简化了编写MapReduce的程序的复杂性,由于MapReduce这种计算模型执行效率比较慢。所以Spark SQL的应运而生,它是将Spark SQL转换成RDD,然后提交到集群执行,执行效率非常快!同时Spark SQL也支持从Hive中读取数据。 2.特点     *容易整合     *统一的数据访问方式     *兼容Hive     *标准的数据连接 3.基本概念     *DataFrame         DataFrame(表) = schema(表结构) + Data(表结构,RDD)             就是一个表 是SparkSql 对结构化数据的抽象             DataFrame表现形式就是RDD         DataFrame是组织成命名列的数据集。它在概念上等同于关系数据库中的表,但在底层具有更丰富的优化。DataFrames可以从各种来源构建,         DataFrame多了数据的结构信息,即schema。         RDD是分布式的Java对象的集合。DataFrame是分布式的Row对象的集合。         DataFrame除了提供了比RDD更丰富的算子以外,更重要的特点是提升执行效率、减少数据读取以及执行计划的优化     *Datasets         Dataset是数据的分布式集合。Dataset是在Spark 1.6中添加的一个新接口,是DataFrame之上更高一级的抽象。它提供了RDD的优点(强类型化,使用强大的lambda函数的能力)以及Spark SQL优化后的执行引擎的优点。一个Dataset 可以从JVM对象构造,然后使用函数转换(map, flatMap,filter等)去操作。 Dataset API 支持Scala和Java。 Python不支持Dataset API。 4.创建表 DataFrame     方式一 使用case class 定义表         val df = studentRDD.toDF     方式二 使用SparkSession直接生成表         val df = session.createDataFrame(RowRDD,scheme)     方式三 直接读取一个带格式的文件(json文件)         spark.read.json("") 5.视图(虚表)     普通视图         df.createOrReplaceTempView("emp")             只对当前对话有作用     全局视图         df.createGlobalTempView("empG")             在全局(不同会话)有效             前缀:global_temp 6.操作表:     两种语言:SQL,DSL      spark.sql("select * from t ").show     df.select("name").show 
曼路
2018/10/18
8830
Spark RDDRelation
注意 这里声明的是 sqlContext = new SQLContext(sc)  如果要存成hive 表 需用hivecontext.
用户3003813
2018/09/06
3620
Spark RDDRelation
SparkSQL常用操作
5、测试dataframe的read和save方法(注意load方法默认是加载parquet文件)
UFO
2018/09/04
5020
SparkSql官方文档中文翻译(java版本)
Spark SQL是Spark的一个组件,用于结构化数据的计算。Spark SQL提供了一个称为DataFrames的编程抽象,DataFrames可以充当分布式SQL查询引擎。
用户3003813
2018/09/06
9.3K0
SparkSql官方文档中文翻译(java版本)
适合小白入门的IDEA开发SparkSQL详细教程
之前博主利用业余时间,梳理了一份《SparkSQL编程系列》,奈何当时考虑不周,写的不是很详细。于是在正式开始学习了之后,决定整理一篇适合像我一样的小白级别都能看得懂的IDEA操作SparkSQL教程,于是就有了下文…
大数据梦想家
2021/01/27
2K0
适合小白入门的IDEA开发SparkSQL详细教程
Spark的Streaming和Spark的SQL简单入门学习
1、Spark Streaming是什么? a、Spark Streaming是什么?   Spark Streaming类似于Apache Storm,用于流式数据的处理。根据其官方文档介绍,Spark Streaming有高吞吐量和容错能力强等特点。Spark Streaming支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字等等。数据输入后可以用Spark的高度抽象原语如:map、reduce、join、window等进行运算。而结果也能保存在很多地
别先生
2018/05/16
9870
惊了!10万字的Spark全文!
Hello,大家好,这里是857技术社区,我是社区创始人之一,以后会持续给大家更新大数据各组件的合集内容,路过给个关注吧!!!
刘浩的BigDataPath
2022/11/30
1.5K0
SparkSQL基本使用
往Hadoop集群上上传测试数据,hdfs dfs -cat /person/employee.txt employee.txt 1,zhangxx,20,manager 2,wangxin,25,employee 3,wangergou,78,xixi 4,wawo,35,gogo 5,liwei,28,programmer 6,hanmeimei,29,UI 1.读取数据,将每一行的数据使用列分隔符分割 val lineRDD = sc.textFile("hdfs://hdp-sk-01:900
sparkle123
2018/04/26
1.1K0
Spark SQL | 目前Spark社区最活跃的组件之一
Spark SQL是一个用来处理结构化数据的Spark组件,前身是shark,但是shark过多的依赖于hive如采用hive的语法解析器、查询优化器等,制约了Spark各个组件之间的相互集成,因此Spark SQL应运而生。
大数据学习与分享
2020/08/10
2.5K0
Spark SQL | 目前Spark社区最活跃的组件之一
JSON综合性复杂案例
查询成绩为80分以上的学生的基本信息与成绩信息 Student.json {"name":"Leo", "score":85} {"name":"Marry", "score":99} {"name":"Jack", "score":74}
编程那点事
2023/02/25
5450
2021年大数据Spark(二十七):SparkSQL案例一花式查询和案例二WordCount
前面使用RDD封装数据,实现词频统计WordCount功能,从Spark 1.0开始,一直到Spark 2.0,建立在RDD之上的一种新的数据结构DataFrame/Dataset发展而来,更好的实现数据处理分析。DataFrame 数据结构相当于给RDD加上约束Schema,知道数据内部结构(字段名称、字段类型),提供两种方式分析处理数据:DataFrame API(DSL编程)和SQL(类似HiveQL编程),下面以WordCount程序为例编程实现,体验DataFrame使用。
Lansonli
2021/10/09
7810
相关推荐
2.sparkSQL--DataFrames与RDDs的相互转换
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验