2024 .1.7 Day05_Spark_HomeWork; Spark_SQL

目录

1. 简述Spark  SQL与HIVE的对比

2. Spark SQL是什么?

3.代码题

需求1 直接基于DataFrame来处理,完成SparkSQL版的WordCount词频统计。DSL和SQL两种方式都要实现

4.创建Spark DataFrame的几种方式?

5.  创建得到DataFrame的方式有哪些,各自适用场景是怎么样的?

                3.1 text方式读取:

                3.2  CSV方式读取:

                    3.3 JSON读取数据:


1. 简述Spark  SQL与HIVE的对比

相同点: 

        1.都是分布式SQL计算引擎

        2.都可以处理大规模的结构化数据

        3.都可以建立在YARN集群之上运行

不同点:

        1. Sparksql是基于内存计算 , Hivesql底层是运行在Mr上,也就是基于磁盘进行计算

        2. sparksql没有元数据管理服务, hivesql是有metastore元数据管理服务的

        3. Sparksql底层执行RDD程序 , HIVEsql底层执行MapReduce

        4. Sparksql可以编写sql也可以编写代码, HIVEsql只能编写sql

2. Spark SQL是什么?

SparkSQL是建立在Spark上的一个工具模块,用于处理结构化的数据

3.代码题

需求1 直接基于DataFrame来处理,完成SparkSQL版的WordCount词频统计。DSL和SQL两种方式都要实现

测试数据: hello spark hadoop hive oozie sqoop hello hive hadoop java java python hadoop hive hadoop

 

import os
from pyspark import SparkConf, SparkContext
from pyspark.sql import SparkSession
import pyspark.sql.functions as F# 绑定指定的Python解释器
os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'
# 绑定指定的Python解释器
from pyspark.sql.types import StructType, IntegerType, StringType, StructFieldif __name__ == '__main__':
# 1- 创建SparkSession对象spark = SparkSession.builder\.appName('需求1词频统计')\.master('local[*]')\.getOrCreate()
# 2- 数据输入init_df = spark.read.text(paths='hdfs://node1:8020/input/day05_home_work.txt')# 创建侧视图init_df.createTempView('words')
# 3- 数据处理print("SQL方式进行词频统计")spark.sql("""select word,count(1)as cnt from(select explode(split(value,' ')) as word from words)group by wordorder by cnt desc """).show()'''
+------+---+
|  word|cnt|
+------+---+
|hadoop|  4|
|  hive|  3|
| hello|  2|
|  java|  2|
| spark|  1|
| oozie|  1|
| sqoop|  1|
|python|  1|
+------+---+
'''print('DSL方式实现词频统计')init_df.select(F.explode(F.split('value',' ')).alias('word')).groupby('word').agg(F.count('word').alias('cnt'),).orderBy('cnt',ascending=False).show()'''+------+---+|  word|cnt|+------+---+|hadoop|  4||  hive|  3||  java|  2|| hello|  2|| sqoop|  1|| spark|  1||python|  1|| oozie|  1|+------+---+'''# 4- 数据输出# 5- 释放资源spark.stop()

4.创建Spark DataFrame的几种方式?

        1 . 通过RDD得到DataFrame

        2. 内部初始化数据得到DataFrame

        3.  读取外部文件得到DataFrame

5.  创建得到DataFrame的方式有哪些,各自适用场景是怎么样的?

        1 . RDD转DataFrame , 场景 : RDD可以存储任意结构的数据类型,而DataFrame只能存储二维表结构化数据, 在使用Spark处理数据的初期,可能输入进来的数据是半结构化或者非结构化的,那么可以先通过RDD对数据进行ETL处理成结构化数据,再使用开发高效率的SparkSQL进行后续数据处理;

        2.  内部初始化数据得到DataFrame ,  通过createDataFrame创建DataFrame , 一般用在开发和测试中.因为只能处理少量的数据

        3.  读取外部文件得到DataFrame , Text方式\CSV方式\JSON方式 ; 

                3.1 text方式读取:

                        不管文件内容如何,会将所有内容放到一个列中;

                        默认生成的列名叫做value,数据类型String;并且只能修改value的名称,其他内容无法修改;

                3.2  CSV方式读取:

                                常设置的参数

                                path:指定文件路径,本地或者hdfs

                                schema:手动指定元数据信息
                                sep:指定字段间的分隔符
                                encoding:指定文件的编码方式
                                header:指定文件中的第一行是否是字段名称
                                inferSchema:根据数据内容自动推断数据类型。但是,推断结果可能不精确

                    3.3 JSON读取数据:

                        需要手动指定schema信息.如果手动指定的时候,名称字段与json中的key名称不一致,会解析不成功, 以null值填充

                        csv/json中schema的结构,如果是字符串类型,那么字段名称和字段数据类型间,只能以空格分隔

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/604505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx(十九) range请求-断点续传/多线程下载

range请求允许服务器只发送请求的一部分响应数据给客户端,通常对大文件传输时,用以实现断点续传、多线程下载等功能。若服务端响应信息头中包含字段 Accept-Ranges:bytes,则表示服务端支持范围请求,且节点范围的单位为字节&#x…

每周一算法:倍增法查找位置

倍增法 倍增法(Binary Lifting),顾名思义,就是利用“以翻倍的速度增长”的思想来解决问题的一类算法,它能够使线性的处理转化为对数级的处理,大大地优化时间复杂度。这个方法在很多算法中均有应用&#xf…

ServiceMesh

服务网格从总体架构上来讲比较简单,由一堆紧挨着各项服务的用户代理,外加一组任务管理流程组成。在服务网格中,代理被称为数据层或数据平面(Data Plane),管理流程被称为控制层或控制平面(Contro…

【IDEA】 解决在idea中连接 Mysql8.0,驱动无法下载问题

本篇继【idea】解决sprintboot项目创建遇到的问题2-CSDN博客 目录 一、Failed to download https://download.jetbrains.com/idea/jdbc-drivers/MySQL/8/LICENSE.txt:Remote host terminated the handshake 二、no dirver files provided com.mysql.cj.jdbc.Driver 三、Serv…

STM32F407ZGT6时钟源配置

1、26M外部时钟源 1、25M外部时钟源

计算机Java项目|基于SpringBoot+Vue的图书个性化推荐系统

项目编号:L-BS-GX-10 一,环境介绍 语言环境:Java: jdk1.8 数据库:Mysql: mysql5.7 应用服务器:Tomcat: tomcat8.5.31 开发工具:IDEA或eclipse 二,项目简介 图片管理系统是一个为学生和…

kotlin take 和 drop

kotlin take的作用 从头开始获取指定数量的元素 val numbers listOf("one", "two", "three", "four", "five", "six") // 取集合的4个集合 Log.d("take", numbers.take(3).toString()) // 打印结果[…

【linux学习】重定向

目录 重定向标准输出、标准输入和标准错误标准输出重定向标准错误重定向将标准输出和标准错误重定向到同一个文件处理不想要的输出标准输入重定向 管道过滤器uniq-报告或者忽略文件中重复的行wc-打印行数、字数和字节数grep-打印匹配行head/tail 打印文件的开头部分/结尾部分te…

基于PGPGPOOL-II部署PostgreSQL高可用环境

PGPOOL-II是一个位于PostgreSQL服务器和 PostgreSQL 数据库客户端之间的中间件,具有以下功能: 1. 连接池:PGPOOL-II可以保持已经连接到 PostgreSQL 服务器的连接,并在使用相同参数(例如:用户名、数据库、协议版本)连接进来时重用它们。这可以减少连接开销,并增加系统的…

nacos与eureka区别

Nacos vs. Eureka: 微服务架构的服务发现之较 随着微服务架构的广泛应用,服务发现成为确保各个微服务之间通信的关键组件。在这个领域,Nacos和Eureka是两个备受关注的解决方案。本文将深入探讨它们的异同,以帮助你在项目中做出明智的选择。 …

C#-程序结构

C# 中的组织结构的关键概念是程序 (program)、命名空间 (namespace)、类型 (type)、成员 (member) 和程序集 (assembly)。 C# 程序由一个或多个源文件组成。 程序中声明类型,类型包含成员,并且可按命名空间进行组织。类和接口就是类型的示例。 字段 (field)、方法、属性和事件…

trino-435:dynamic catalog restful API开发

前置内容 restful API开发所在的位置core->trino-main->metadata模块下。主要实现查看已有catalog、注册catalog实现动态扩展、catalog的删除操作。coordinator和worker节点对该功能接口的实现是有区别的: coordinator节点包含查看已有catalog、注册catalog实现动态扩展…

How can I be sure that I am pulling a trusted image from docker?

1、Error response from daemon: manifest for jenkins:latest not found: manifest unknown: manifest unknown 2、Error response from daemon: pull access denied for nacos, repository does not exist or may require ‘docker login’: denied: requested access to th…

[蓝桥杯学习] ST表

RMQ问题 ST 表 用状态 s[i][j] 记录区间长度为 2^j 的长度的区间的最大值 所以状态转移方程就是 st[i][j] max( st[i][j-1] , st[i(1 << (j-1))][j-1] ) 注意状态转移的方向&#xff0c;保证区间合法性&#xff08;i2^j 不能超过数组大小&#xff09; 写完这些后&am…

Latex论文模板

%!TEX program xelatex \documentclass[12pt,a4paper]{article}% 文档格式 \usepackage{ctex,hyperref}% 输出汉字 \usepackage{times}% 英文使用Times New Roman \setmainfont{TeX Gyre Termes} \title{\fontsize{18pt}{27pt}\selectfont% 小四字号&#xff0c;1.5倍行距 {\h…

大数据Doris(五十一):Colocation Join介绍

文章目录 Colocation Join介绍 一、原理 二、使用方式 1、建表 2、删表

HarmonyOS 应用开发学习笔记 stateStyles:多态样式

1、 HarmoryOS Ability页面的生命周期 2、 Component自定义组件 3、HarmonyOS 应用开发学习笔记 ets组件生命周期 4、HarmonyOS 应用开发学习笔记 ets组件样式定义 Styles装饰器&#xff1a;定义组件重用样式 Extend装饰器&#xff1a;定义扩展组件样式 前面记录了ets组件样式…

Python的基础练习题之学生管理系统

需求 使用Python基础写一个基于控制台的学生管理平台&#xff0c;里面功能分别是&#xff1a;1.录入学生信息2.查找学生信息3.删除学生信息4.修改学生信息5.排序6.统计学生总人数7.显示所有学生信息&#xff0c;要求数据存储在文件里。 代码 代码资源地址可以直接下载 效果图…

DataFunSummit:2023年知识图谱在线峰会-核心PPT资料下载

一、峰会简介 AIGC&#xff0c;ChatGPT以及发布的GPT-4相信已经给大家带来足够的冲击&#xff0c;那么对于知识图谱的应用产生哪些变化和变革&#xff1f;知识图谱在其中如何发挥作用呢&#xff1f;通过LLM是否有可能辅助创建通用大规模知识图谱&#xff1f;AIGC时代下行业知识…

家里有必要买NAS吗?

完全没有必要&#xff0c;因为用旧电脑搭建NAS不仅价格实惠&#xff0c;而且非常简单&#xff0c;效果也完全不差买了的&#xff01; 并且......还环保 教程链接&#xff1a; 用旧电脑搭建NAS在您的家庭中&#xff0c;通过将旧 PC 转变为NAS服务器&#xff0c;您可以轻松搭建…