spark--练习1

需求

利用sparksql读取data.csv文件,统计如下结果

1.统计每个姓氏以及人数,不考虑复姓

2.统计每个生肖以及人数

3.统计每个年龄段的人数,期望结果

年龄段 人数

1 - 10 xx

11 - 20 xx

21 - 30 xx

...

4.统计每个省份积分最高的前3个人

姓名 分数 省份 排名

data.csv文件:

1.统计每个姓氏以及人数,不考虑复姓

python 复制代码
from pyspark.sql import SparkSession

if __name__ == '__main__':
    spark = SparkSession.builder \
        .appName("测试") \
        .getOrCreate()

    df = spark.read.option('header',True).csv('data.csv')
    df.createTempView('t1')
    #1.统计每个姓氏以及人数,不考虑复姓
    #substring(name, 0, 1) 将从 name 字符串中
    #提取从索引 0(包含)到索引 1(不包含)的子字符串,即第一个字符。
    spark.sql('''
                select substring(name,0,1) xing,count(*) cnt
                from t1
                group by substring(name,0,1)
              ''').show()

2.统计每个生肖以及人数

python 复制代码
from pyspark.sql import SparkSession

if __name__ == '__main__':
    spark = SparkSession.builder \
        .appName("测试") \
        .getOrCreate()

    df = spark.read.option('header',True).csv('data.csv')
    df.createTempView('t1')
    def computer_animals(year):
        arr = ['鼠','牛','虎','兔','龙','蛇','马','羊','猴','鸡','狗','猪']
        return arr[(int(year)-4)%12]
    #
    # # #2.统计每个生肖以及人数
    '''
    使用spark.udf.register将Python函数computer_animals注册为Spark SQL的UDF(用户定义函数),以便在SQL查询中使用。
    
    SQL查询首先从t1视图中提取每个人的生日年份(
    这里通过substring(birthday,0,4)提取年份),然后使用注册的UDF computer_animals计算对应的生肖。
    最后,按生肖分组并计算每个生肖的人数。查询结果通过.show()方法显示出来。
    '''
    spark.udf.register('computer_animals',computer_animals)
    spark.sql('''
                select computer_animals(substring(birthday,0,4)) animals,count(*) cnt
                from t1
                group by computer_animals(substring(birthday,0,4))
              ''').show()

3.统计每个年龄段的人数

python 复制代码
from pyspark.sql import SparkSession

if __name__ == '__main__':
    spark = SparkSession.builder \
        .appName("测试") \
        .getOrCreate()

    df = spark.read.option('header',True).csv('data.csv')
    df.createTempView('t1')

    spark.sql('''
                    select case when age >= 20 and age <= 30 then '20-30'
                             when age >= 30 and age <= 40 then '30-40'
                             when age >= 40 and age <= 50 then '40-50'
                             else '60以上' end age2,count(*) cnt
                    from(
                        select 2024 - substring(birthday,0,4) age
                        from t1
                    )t2 group by 
                        case when age >= 20 and age <= 30 then '20-30'
                             when age >= 30 and age <= 40 then '30-40'
                             when age >= 40 and age <= 50 then '40-50'
                             else '60以上' end 

                  ''').show()

4.统计每个省份积分最高的前3个人

python 复制代码
from pyspark.sql import SparkSession

if __name__ == '__main__':
    spark = SparkSession.builder \
        .appName("测试") \
        .getOrCreate()

    df = spark.read.option('header',True).csv('data.csv')
    df.createTempView('t1')
    spark.sql("""
                select name,score,provincename,rn
                from(
                    select
                        name,score,provincename,row_number() over(partition by provincename order by score desc) rn
                    from t1 where provincename is not null
                )t2 where rn <= 3
             """).show(150)
    spark.stop()
相关推荐
youngqqcn1 分钟前
SQL中联表查询深入分析
数据库·sql
TG:@yunlaoda360 云老大2 分钟前
如何在华为云国际站代理商控制台进行SFS Turbo的基础状态核查?
大数据·服务器·华为云·php
Java&Develop6 分钟前
PL/SQL Developer可视化修改数据
数据库·sql
Yyyyy123jsjs9 分钟前
XAUUSD API 周末无推送,会影响回测与实盘一致性吗?
大数据·区块链
安冬的码畜日常10 分钟前
【玩转 Postman 接口测试与开发2_020】(完结篇)DIY 实战:随书示例 API 项目本地部署保姆级搭建教程(含完整调试过程)
python·测试工具·django·接口测试·postman·fastapi·api项目
winfredzhang11 分钟前
wxPython实战:打造一个优雅的图片预览工具
chrome·python·预览·剪切板
superman超哥14 分钟前
仓颉GC调优参数深度解析
c语言·开发语言·c++·python·仓颉
Byron Loong18 分钟前
【机器视觉】人物安全距离监测
python·yolo·计算机视觉
是Judy咋!19 分钟前
Elasticsearch---单机部署
大数据·elasticsearch·搜索引擎
天辛大师19 分钟前
2026年丙午年火马年周易运势与AI预测大模型启示录
大数据·人工智能·游戏·随机森林·启发式算法