sparkSql——wordcount案例

我们一般处理的数据都是结构化的数据,结构化的数据最好使用SQL来解决。

sparkCore就是对RDD的操作

sparkSql就是对dataframe的操作

SQL语句

DSL算子

获取dataframe的方式

1、直接通过文件
2、通过Rdd获取
3、使用spark.createDataFrame
data = [("Tom", 20), ("Jerry", 18)] 
columns = ["name", "age"]  
df = spark.createDataFrame(data, columns)

当为一元组时
data = [(471,)]
columns = ["userId"]
userDf = spark.createDataFrame(data, columns)

wordcount案例

hadoop spark
hive hadoop spark  spark
hue hbase hbase hue  hue
hadoop spark

hive hadoop  spark spark
hue hbase  hbase hue hue
hadoop spark

hive hadoop spark  spark
hue hbase hbase  hue hue
hadoop spark

sparkSql写法

import os

from pyspark.sql import SparkSession

if __name__ == '__main__':
    # 配置环境
    os.environ['JAVA_HOME'] = 'E:/java-configuration/jdk-8'
    # 配置Hadoop的路径,就是前面解压的那个路径
    os.environ['HADOOP_HOME'] = 'E:/applications/bigdata_config/hadoop-3.3.1/hadoop-3.3.1'
    # 配置base环境Python解析器的路径
    os.environ['PYSPARK_PYTHON'] = 'C:/Users/35741/miniconda3/python.exe'  
    # 配置base环境Python解析器的路径
    os.environ['PYSPARK_DRIVER_PYTHON'] = 'C:/Users/35741/miniconda3/python.exe'

    # 创建一个sparkSession对象
    spark = SparkSession.builder.master("local[2]").appName("第一个sparksql案例").config("spark.sql.shuffle.partitions",2).getOrCreate()
    
    # 将一个文件变成dataFrame,然后创建一个临时表
    df = spark.read.text("../../data/wordcount/input/data.txt")
    df.createOrReplaceTempView("wordcount")
    
    # 开始写sparkSql
    spark.sql("""
    with t1 as ( 
        select  trim(word) word,1 i from wordcount lateral view explode(split(value," ")) words as word 
     )
     select word,sum(i) sumCount from t1 where word != "" group by word
    
    """).show()

    #show 的使用: 第一个参数是展示的条数 默认为20行
    # 第二个参数truncate 默认为True ,表示若显示的数据过长就会折叠起来

    spark.stop()

DSL操作的写法

类似于RDD的编程方式:调用算子函数来实现处理

流程:直接调用DataFrame的DSL函数进行处理原生DSL函数【将SQL语法变成了函数】:select、where、groupBy、orderBy、limit、count、agg

import os

from pyspark.sql import SparkSession
from pyspark.sql import functions as F


if __name__ == '__main__':
    # 配置环境
    os.environ['JAVA_HOME'] = 'E:/java-configuration/jdk-8'
    # 配置Hadoop的路径,就是前面解压的那个路径
    os.environ['HADOOP_HOME'] = 'E:/applications/bigdata_config/hadoop-3.3.1/hadoop-3.3.1'
    # 配置base环境Python解析器的路径
    os.environ['PYSPARK_PYTHON'] = 'C:/Users/35741/miniconda3/python.exe'  
    # 配置base环境Python解析器的路径
    os.environ['PYSPARK_DRIVER_PYTHON'] = 'C:/Users/35741/miniconda3/python.exe'

    # 创建一个sparkSession对象
    spark = SparkSession.builder.master("local[2]").appName("第一个sparksql案例").config("spark.sql.shuffle.partitions",2).getOrCreate()

    # 将一个文件变成dataFrame,然后创建一个临时表
    df = spark.read.text("../../data/wordcount/input/data.txt")
    df.createOrReplaceTempView("wordcount")

    # 打印表结构
    df.printSchema()
    
    # DSL操作 
    df.select(F.explode(F.split("value", " ")).alias("word")) \
        .where("trim(word) !=''").groupby("word").count().orderBy("count", ascending=False).show()

    spark.stop()
相关推荐
南宫生11 分钟前
力扣每日一题【算法学习day.130】
java·学习·算法·leetcode
干饭高手16 分钟前
Day9,Hot100(图论)
python·leetcode·图论
honghongstand22 分钟前
代码随想录D52-53 图论 Python
开发语言·python·图论
过客猫202228 分钟前
使用 deepseek实现 go语言,读取文本文件的功能,要求支持 ascii,utf-8 等多种格式自适应
开发语言·后端·golang
程序媛-徐师姐39 分钟前
基于 Python Django 的校园互助平台(附源码,文档)
开发语言·python·django·校园互助·校园互助平台
南宫生1 小时前
力扣每日一题【算法学习day.133】
java·学习·算法·leetcode
进击的_鹏1 小时前
【C++】list 链表的使用+模拟实现
开发语言·c++·链表
大数据追光猿1 小时前
【深度学习】Pytorch项目实战-基于协同过滤实现物品推荐系统
人工智能·pytorch·python·深度学习·ai编程·推荐算法
m0_738355691 小时前
java泛型
java·开发语言
m0_748247551 小时前
重学SpringBoot3-整合 Elasticsearch 8.x (二)使用Repository
大数据·elasticsearch·jenkins