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()
相关推荐
fqbqrr3 小时前
2606C++,C++构的多态
开发语言·c++
biter down3 小时前
从 0 到 1 搭建 Python 接口自动化测试框架(博客系统实战)
开发语言·python
Bode_20024 小时前
基于大数据分析的全生命周期质量追溯质量评估体系落地方案
大数据·人工智能
serve the people4 小时前
Elasticsearch(1) could you tell me how to use es if i am a beginner
大数据·elasticsearch·jenkins
小宋加油啊4 小时前
学习机械臂相关知识
学习
一个儒雅随和的男子5 小时前
Elasticsearch出现深度分页问题怎么解决?
大数据·elasticsearch·搜索引擎
肖永威5 小时前
Python多业务并行计算框架插件化演进:从硬编码到动态注册
python·插件化·并行计算·动态注册
yz_aiks5 小时前
Linux Jar包配置Systemd自启动实战:从排查到配置全流程
linux·python·jar·自启动·systemd
AI智图坊5 小时前
多件装组合SKU图的批量生产效率分析:从PS手工到AI自动化的工作流改造
大数据·运维·人工智能·gpt·ai作画·自动化·aigc