Spark SQL典型案例

news2024/12/24 9:45:32

文章目录

      • 一、实现任务
        • 1、准备数据文件
        • 2、创建Maven项目
        • 3、修改源程序目录
        • 4、添加依赖和设置源程序目录
        • 5、创建日志属性文件
        • 6、创建HDFS配置文件
        • 7、创建词频统计单例对象

一、实现任务

1、准备数据文件

  • /home目录创建words.txt
    在这里插入图片描述

hello scala world
hello spark world
scala is very concise
spark is very powerful
let us learn scala and spark
we can learn them well

  • 上传单词文件到HDFS指定目录

hdfs dfs -mkdir p /wordcount/input
hdfs dfs -put words.txt /wordcount/input

2、创建Maven项目

  • 创建Maven项目 - SparkSQLWordCount
    在这里插入图片描述

3、修改源程序目录

在这里插入图片描述

4、添加依赖和设置源程序目录

  • 在pom.xml文件里添加依赖和设置源程序目录
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>net.huawei.sql</groupId>
    <artifactId>SparkSQLWordCount</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.12.15</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>3.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.12</artifactId>
            <version>3.1.3</version>
        </dependency>
    </dependencies>
    <build>
        <sourceDirectory>src/main/scala</sourceDirectory>
    </build>
</project>

5、创建日志属性文件

  • 在resources目录里创建log4j.properties文件
log4j.rootLogger=ERROR, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spark.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

6、创建HDFS配置文件

  • 在resources目录里创建hdfs-site.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property>
        <description>only config in clients</description>
        <name>dfs.client.use.datanode.hostname</name>
        <value>true</value>
    </property>
</configuration>

7、创建词频统计单例对象

  • 创建net.xxr.sql包,在包里创建WordCount单例对象
package net.xxr.sql


import org.apache.spark.sql.{Dataset, SparkSession}

/**
 * 功能:利用Spark SQL实现词频统计
 */
object WordCount {
  def main(args: Array[String]): Unit = {
    // 创建或得到SparkSession
    val spark = SparkSession.builder()
      .appName("SparkSQLWordCount")
      .master("local[*]")
      .getOrCreate()
    // 读取HDFS上的单词文件
    val lines: Dataset[String] = spark.read.textFile("hdfs://master:9000/wordcount/input/words.txt")
    // 显示数据集lines内容
    lines.show()
    // 导入Spark会话对象的隐式转换
    import spark.implicits._
    // 将数据集中的数据按空格切分并合并
    val words: Dataset[String] = lines.flatMap(_.split(" "))
    // 显示数据集words内容
    words.show()
    // 将数据集默认列名由value改为word,并转换成数据帧
    val df = words.withColumnRenamed("value", "word").toDF()
    // 显示数据帧内容
    df.show()
    // 基于数据帧创建临时视图
    df.createTempView("v_words")
    // 执行SQL分组查询,实现词频统计
    val wc = spark.sql(
      """
        | select word, count(*) as count
        |    from v_words group by word
        |    order by count desc
        |""".stripMargin)
    // 显示词频统计结果
    wc.show()
    // 关闭会话
    spark.close()
  }
}

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

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

相关文章

使用 docker 搭建 mongodb 6 单节点副本集

1、拉取 mongodb 镜像 docker pull mongo 2、启动一个 mongodb 的容器&#xff0c;通过副本集的形式运行 docker run --name mongoRs -d -p 27017:27017 mongo --replSet rs0 --name 创建容器的名称。 自定义 -d 以守护进程方式启动容器 -p 2701:27017&#xff1a;MongoD…

Dockerfile 使用介绍

我们使用 Dockerfile 定义镜像&#xff0c;依赖镜像来运行容器&#xff0c;因此 Dockerfile 是镜像和容器的关键&#xff0c;Dockerfile 可以非常容易的定义镜像内容&#xff0c;同时在我们后期的微服务实践中&#xff0c;Dockerfile 也是重点关注的内容&#xff0c;今天我们就…

Android系统的问题分析笔记(9) - Android 中的 Uri 如何使用呢 ?

问题 Android 中常用的 uri 如何使用呢 &#xff1f;&#xff08;此篇分析基础为Android 7.1.1系统源码&#xff09;&#xff0c;参看Android官方说明&#xff1a;https://developer.android.com/reference/android/net/Uri&#xff0c;代码可在此查看&#xff1a;https://git…

python 模块, 包

C# 中模块&#xff0c;就好像要using dll文件 python 中模块 就是python文件 包括类、方法、变量等 from 模块名 import 功能名 功能名() import 模块名 和 from 模块名 import * 模块名都引入了&#xff0c;但使用有所区别 import 模块名 使用 模块名.功能名 from 模块名 impo…

天天使用MySQL,你知道MySQL数据库能抗多少压力吗?附(真实案例)

今天给大家分享一个知识点&#xff0c;是关于MySQL数据库架构演进的&#xff0c;因为很多兄弟天天基于mysql做系统开发&#xff0c;但是写的系统都是那种低并发压力、小数据量的&#xff0c;所以哪怕上线了也就是这么正常跑着而已&#xff0c;但是你知道你连接的这个MySQL数据库…

关于HTTP头部的重要事项,你可能不知道的!

HTTP请求就像向服务器请求某些内容&#xff0c;而HTTP响应则是服务器的回复。就像发送一条消息并收到回复一样。 HTTP请求头部是在发出请求时包含的额外信息&#xff0c;比如你要发送的数据类型或你的身份信息。在响应头部中&#xff0c;服务器提供有关发送给你的响应的信息&am…

【大学物理实验】示波器

文章目录 选择题选择题 函数信号发生器产生的电信号调节频率和调整幅度大小的旋钮是: A. 1,2 B. 2,3 C. 3,4 D. 1,4 正确答案: D 信号输入示波器Y2通道后,示波器面板上工作方式和内触发的选择应该是: A. 工作方式选Y1,内触发选Y2 B. 工作方式选Y2,内触发选Y2 C. 工作方…

day22--哈希

两数之和 哈希表的思想 以空间换时间&#xff0c;这是由于哈希表保存了键值对&#xff0c;其查找复杂度为O(1)。 解题思路为 定义哈希表hashmap&#xff0c;其存放的键值对为<取值&#xff0c;下标>。 从开始处遍历数组&#xff0c;对于第i个位置&#xff0c;在哈希表…

【字符串part02】| 28.实现strStr()、459.重复的子字符串

目录 ✿LeetCode28.实现strStr()❀ ✿LeetCode459.重复的子字符串❀ ✿LeetCode28.实现strStr()❀ 链接&#xff1a;28.实现strStr() 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 …

C++ gets函数与strlen函数详解

引言 今天在看y总视频师对下面这串代码颇感兴趣&#xff1a; #include <iostream> #include <string.h> using namespace std; int main() {char s[1000];gets(s);int n strlen(s);for (int i 0; i < n; i){int j i;while (j < n && s[j] ! ){…

【MyBatis】什么是MyBatis?

MyBatis 是一款优秀的持久层框架&#xff0c;用于简化JDBC的开发。 说人话就是连接数据库并执行SQL的框架。 文章目录 0 JDBC简介及流程0.1 DriverManager / Connection0.2 ResultSet0.3 PreparedStatement1 SQL注入2 流程 1 MyBatis通过注解执行SQL语句1.1 MyBatis入门&…

简要介绍 | 神经辐射场(NeRF):原理、挑战与未来展望

神经辐射场(NeRF)&#xff1a;原理、挑战与未来展望 1. 背景介绍 随着深度学习和计算机图形学的不断发展&#xff0c;人工智能和图形学领域的交叉研究越来越多地受到关注。神经辐射场(NeRF)是其中一个极具潜力的研究方向&#xff0c;它结合了计算机图形学和深度学习&#xff0…

STM32驱动INMP441麦克风实现左右通道声音采集

一、参考原理图 1、INMP441 2、STM32 注意INMP441的第4引脚&#xff0c;用来选择左声道还是右声道。 二、代码生成 代码使用cubemx生成 1、iis设置 2、DMA设置 3、生成代码 三、代码修改 1、首先定义一个数组 #define BUFFER_SIZE (4)static uint32_t simpleBuf[BUFFER_S…

金属表面缺陷检测类的实践项目

【说明】&#xff1a;下面仅以Pytorch CNN Transfer Learning: Image Classifier 关于金属表面缺陷检测类的实践项目为例介绍如何创建虚拟环境以及在JuypterLab中使用对应的内核 项目已开源在https://github.com/astudent2020/Metal_Surface_Defects 提供数据集及相关代码 …

【IMDB】IMDB数据集导入PostgreSQL和join order benchmark(JOB)查询生成

目录 简述join order benchmark(JOB)查询获取IMDB导入数据到PG 简述 IMDB数据库是一个很大的&#xff0c;被广泛使用的电影&#xff0c;电视节目和演员信息的数据库&#xff0c;它包括了有关电影、电视节目、演员、制作公司、编剧、导演等信息。IMDB数据集可以为电影评论、分类…

【源码分析】Mybatis 的配置解析过程

博主介绍&#xff1a; ✌博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家✌ Java知识图谱点击链接&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; &#x1f495;&#x1f495; 感兴趣的同学可以收…

Hadoop(CentOS)安装及MapReduce实现数据去重

Hadoop&#xff08;CentOS&#xff09;安装及MapReduce实现数据去重 1. JDK安装 1.1 资源下载&#xff1a; 下载地址&#xff1a;https://pan.quark.cn/s/17d7266205f9 hadoop的安装 包 java jdk安装包 eclipse连接hadoop工具 所学其他工具可自行在官网下载 centos下载地…

Verilog 高级知识点

目录 Verilog 高级知识点 1、阻塞赋值&#xff08;Blocking&#xff09; 2、非阻塞赋值&#xff08;Non-Blocking&#xff09; 3 、assign 和 always 区别 4、什么是 latch Verilog 高级知识点 本节给大家介绍一些高级的知识点。高级知识点包括阻塞赋值和非阻塞赋值、assi…

合宙Air724UG Cat.1模块硬件设计指南--ADC接口

ADC接口 简介 ADC(Analog-to-Digital Converter) 指模数转换器。是指将连续变化的模拟信号转换为离散的数字信号的器件。 合宙Cat.1模块ADC接口主要用来检测模拟电压信号量&#xff0c;用于电池电压检测&#xff0c;温湿度检测&#xff0c;TDS检测等应用。 特性 ADC精度&#…

华为OD机试真题 JavaScript 实现【素数之积】【2022Q4 100分】

一、题目描述 RSA加密算法在网络安全世界中无处不在&#xff0c;它利用了极大整数因数分解的困难度&#xff0c;数据越大&#xff0c;安全系数越高。 给定一个32位正整数&#xff0c;请对其进行因数分解&#xff0c;找出是哪两个素数的乘积。 二、输入描述 一个正整数num …