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()
相关推荐
2601_962099082 分钟前
python flask sqlalchemy连接数据库流程介绍
数据库·python·flask·教程·sqlalchemy
右耳朵猫AI3 分钟前
Node.js周刊2026W36 | NestJS 12发布、Remix 3 RC、pnpm 12 Rust重写、Node.js 26.8.0
开发语言·rust·node.js
TDengine (老段)3 分钟前
TDgpt 概览 — AI 增强的时序数据库
大数据·数据库·人工智能·物联网·时序数据库·iot·tdengine
2601_962293244 分钟前
python接口自动化(二十八)--html测试 报告——下(详解)
python·接口自动化·编码问题·htmltestrunner·报告优化
烂蜻蜓8 分钟前
Flask入门教程(附录):模板渲染API——Jinja2集成全解析
后端·python·flask
IT研究室8 分钟前
最新大数据毕业设计选题推荐-基于大数据的城市空气污染物浓度数据分析与可视化-大数据-Spark-Hadoop-Bigdata
大数据·数据分析·课程设计
2601_9623878212 分钟前
Python CUDA 编程 - 2 - Numba 简介
python·numpy·cuda·jit编译器·numba
统计学小王子21 分钟前
数学建模国赛倒计时 2 天 ——《异常值的处理(R语言)》
开发语言·数学建模·r语言
starzy19902 小时前
Flink基础之Session-Cluster原理详解:共享集群的利与弊
大数据·flink
starzy19902 小时前
Flink基础之Per-Job-Cluster原理详解:被 Application 取代的模式
java·大数据·flink