sparksql数值类型排序乱序

文章讲述了在使用SparkSQL处理数据时遇到的数值类型字段排序问题,由于默认按字符串处理导致排序错误。解决方案是读取数据时将数值列转换为适当的数据类型(如整数),或者在排序时使用cast函数将score列转换为int类型再进行排序,从而得到正确的结果。
摘要由CSDN通过智能技术生成

sparksql对数值类型的字段排序错乱的问题

  1. 我们使用spark读取文本文件进行数据列的排序处理,发现排序并没有按预想的顺序。
    原因是数据从文本读入spark的时候,都是按照字符串来处理的,这里直接排序的话也是以字符顺序排序,并未按数字排序。
  2. 源数据score.txt如下:

korry,Chinese,90
korry,Math,100
korry,Englis,96
korry,Art,80
korry,Physics,98
korry,History,86

  1. 处理数据代码如下:
//读取数据,创建临时表
sc.textFIle(score.txt)
	.map(x => x.split(","))
	.map(x =>(x(0),x(1),x(2)))
	.toDF("name","subject","score")
	.createOrReplaceTempView("scoreInfo")
//对成绩表进行排序处理
spark.sql("select * from scoreInfo order by score desc").show() 
  1. 结果如下:
namesubjectscore
korryMath100
korryArt80
korryHistory86
korryChinese90
korryEnglish96
korryPhysics98

如上结果显示,很显然没有按预想的成绩顺序排序。

解决办法

  1. 读入数据的时候对数值列做处理
//读取数据,创建临时表
sc.textFIle(score.txt)
	.map(x => x.split(","))
	.map(x =>(x(0),x(1),x(2).toInt))
	.toDF("name","subject","score")
	.createOrReplaceTempView("scoreInfo")
//对成绩表进行排序处理
spark.sql("select * from scoreInfo order by score desc").show() 
  1. 在排序的时候对数值列做处理
//读取数据,创建临时表
sc.textFIle(score.txt)
	.map(x => x.split(","))
	.map(x =>(x(0),x(1),x(2)))
	.toDF("name","subject","score")
	.createOrReplaceTempView("scoreInfo")
//对成绩表进行排序处理
spark.sql("select * from scoreInfo order by cast(score as int) desc").show() 
  1. 结果如下:
namesubjectscore
korryMath100
korryPhysics98
korryEnglish96
korryChinese90
korryHistory86
korryArt80

现在排序结果就没有问题啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值