欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > spark--练习1

spark--练习1

2025/5/2 18:10:58 来源:https://blog.csdn.net/m0_46331650/article/details/141003300  浏览:    关键词:spark--练习1

需求

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

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

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

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

    年龄段   人数

   1  - 10    xx

   11 - 20    xx

   21 - 30    xx    

    ...

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

  姓名  分数   省份   排名

 data.csv文件:

 

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

from pyspark.sql import SparkSessionif __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(*) cntfrom t1group by substring(name,0,1)''').show()

 

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

from pyspark.sql import SparkSessionif __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(*) cntfrom t1group by computer_animals(substring(birthday,0,4))''').show()

 

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

from pyspark.sql import SparkSessionif __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(*) cntfrom(select 2024 - substring(birthday,0,4) agefrom 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个人

from pyspark.sql import SparkSessionif __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,rnfrom(selectname,score,provincename,row_number() over(partition by provincename order by score desc) rnfrom t1 where provincename is not null)t2 where rn <= 3""").show(150)spark.stop()

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词