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()
相关推荐
有风南来1 分钟前
算术图片验证码(四则运算)+selenium
自动化测试·python·selenium·算术图片验证码·四则运算验证码·加减乘除图片验证码
wangjinjin1802 分钟前
Python Excel 文件处理:openpyxl 与 pandas 库完全指南
开发语言·python
愚润求学2 分钟前
【C++】类型转换
开发语言·c++
斯奕sky_small-BAD14 分钟前
C++ if语句完全指南:从基础到工程实践
java·开发语言·php
我的golang之路果然有问题17 分钟前
云服务器部署Gin+gorm 项目 demo
运维·服务器·后端·学习·golang·gin
Humbunklung24 分钟前
Rust Floem UI 框架使用简介
开发语言·ui·rust
代码匠心41 分钟前
从零开始学Flink:揭开实时计算的神秘面纱
java·大数据·后端·flink
Yxh181377845541 小时前
抖去推--短视频矩阵系统源码开发
人工智能·python·矩阵
网安INF1 小时前
RSA加密算法:非对称密码学的基石
java·开发语言·密码学