[spark][sql]Spark中使用RDD.toDF()由于数据类型不同带来的bug记录
Spark转换RDD到DF时,因数据类型不同带来的问题记录
问题描述
环境
注意!!! 在spark3+中,此bug是否还存在待证实。
spark2.4.5
pyspark
目标逻辑
在使用Spark过程中,需要将保存数据列表的RDD转换为DataFrame写入hive表中。
问题发生
在列表数据转换成DF,执行DF.show()时,原本有数据的某行数据列表,全部变成了null
[,,,,,,,,,,,,,,,,]
问题排查
step1 确认是否是数据本身有问题
单独找到发生问题的这一行数据,利用主键id,仅对这一条数据进行处理,结果发现数据存在。
[Type<int>,Type<int>,Type<int>,Type<int>,Type<int>,Type<int>,Type<int>,Type<int>,Type<int>,Type<int>,Type<int>,Type<int>,Type<int>,Type<int>,Type<int>,Type<int>,Type<int>]
step2 确认是否是逻辑出了问题
比对原始数据,得到的结果是否与原始思路存在偏差
并没有
逻辑上并没有问题
step3 求助
题外话1
我百度了一些资料,但是并没有直接相关的,可能我搜索能力太差了,很多问题都不知道搜索什么关键词
题外话2
想问老司机,但是他肯定先让我百度,我又没有社交牛逼症,加上老司机最近忙,我也不想去烦他,嘤嘤嘤。
题外话3
怎么能找到一些比较值得学习的spark/hive的代码呢?
step3 找不同
因为这个问题不得不解决,所以只能先找切入点,也就是找不同。
进行了大概十几分钟的找不同后发现,有的rdd数据行是存在数据的,形如[Type
尝试修复
现在知道了异常的点——Float: 有 Int: 无
在rdd构建过程中,将所有的int数据全部转换成float数据。
结果发现,原本消失的数据,重新出现了。
问题总结
与其说是问题总结,我更想写点别的,以我现在的水平,其实也写不了问题总结。
1.首先感谢您能点开我的博客,如果能帮到您,是我的荣幸,感谢!以下是个人的一些无关的感想。
2.我并不知道源码上是怎么处理int数据和float数据的,为什么会把Int数据给弄没了。
3.按照面对对象编程逻辑integer是float的子类,int只能访问数据的整数部分,float有更高的权限,可以访问数据的小数部分,Integer是可以向float升级的,但是放到spark这个框架里,数据就没了。
4.刚迈入职场几个月,从CV转到大数据挖掘,技术栈从python+pytorch转到sql+python+scala+spark,发现网上很多资料比较旧,spark的源码剖析都还是spark1的,AKKA在spark2源码里变成RPC,学以致用,痛并快乐。
5.为什么写博客,且选择CNBLOG?之前求学的时候,在隔壁XXDN写了一些数学知识的总结,但是,隔壁广告太多,且都是互相借鉴,最近感觉还买通了某搜索平台,一搜一堆,解决不了问题,工作以后还是想写一点东西,也当做是记录一下自己的变化,目前频率一周一篇吧。
6.以前,大概5年前,学过一点C++,当时听的侯捷先生的课程,现在做大数据了,用scala+spark有想去了解一下Java,也想认真了解一下Scala,但是也没有找到一门合适的公开课(其实也没去搜过,因为知道自己精力不够)
7.结尾这条感叹一下,想要知识变现的老师赚了想要找好工作的学生的钱,大家都得到了想要的,两件快乐事情重合在一起。而这两份快乐,不知为什么,总感觉有点怪怪的。

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号