spark union 特别注意
发表于:2024-10-09 作者:千家信息网编辑
千家信息网最后更新 2024年10月09日,今天遇到一个很诡异的问题。表Auseridhousecoderesctimeu1code111301表Buseridhousecoderesctimeu2code201302表Cuseridnamet
千家信息网最后更新 2024年10月09日spark union 特别注意
今天遇到一个很诡异的问题。
表A
userid | housecode | res | ctime |
---|---|---|---|
u1 | code1 | 1 | 1301 |
表B
userid | housecode | res | ctime |
---|---|---|---|
u2 | code2 | 0 | 1302 |
表C
userid | name | type | time |
---|---|---|---|
u1 | 大海 | 0 | 1303 |
然后对表A进行处理操作
表A.createOrReplaceTempView("t1");
JavaRDD
t1= s.createDataFrame(rdd, HistoryModelExt.class);
然后查看t1, t1.show()
u1 | code1 | 1 | 1301 |
---|---|---|---|
.. | .. | .. | .. |
数据还在,然后 B union A 然后 join C(通过userid), 理论上应该是有结果的,感觉就像1+1=2 这么肯定,但是还真没有数据,非常诧异。
刚开始以为是自己程序哪里有问题,苦苦寻找,发现一切正常, 最后回到 union这个方法上。
为了看清楚前因后果, 我把B union A的数据打印了出来,发现了一个奇怪的事情
userid | housecode | res | ctime |
---|---|---|---|
u2 | code2 | 0 | 1302 |
1301 | code1 | 1 | u1 |
当时一下子就明白为什么join 没有数据了, A的schema已经与B不一致了。
原来 union函数并不是按照列名合并,而是按照位置合并。
但是在JavaRDD
查看源代码
/** * Applies a schema to an RDD of Java Beans. * * WARNING: Since there is no guaranteed ordering for fields in a Java Bean, * SELECT * queries will return the columns in an undefined order. * * @since 2.0.0 */ def createDataFrame(rdd: RDD[_], beanClass: Class[_]): DataFrame = { val attributeSeq: Seq[AttributeReference] = getSchema(beanClass) val className = beanClass.getNameval rowRdd = rdd.mapPartitions { iter => // BeanInfo is not serializable so we must rediscover it remotely for each partition. SQLContext.beansToRows(iter, Utils.classForName(className), attributeSeq) } Dataset.ofRows(self, LogicalRDD(attributeSeq, rowRdd.setName(rdd.name))(self)) }
看注释,fields的顺序是不保证的, 原来如此。
这样你在union前乖乖的执行
t1.select("userId","houseCode","res","ctime");
这样顺序就又恢复了,大数据排查问题特别麻烦,感觉是一个很大的坑,希望能帮到后来人。
数据
问题
一致
感觉
顺序
很大
诡异
诧异
前因后果
原来如此
乖乖
事情
位置
函数
后来人
大海
对象
方法
是在
注释
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
敏捷软件开发平台哪个好
互联网科技集团
沉迷网络安全科技馆
张家口网络安全公务员
几百块钱个人服务器主机
平台数据软件开发
安卓软件开发如何推送通知
数据库前台后台环境搭建
外部时间服务器
数据库字符型str
django 数据库取值
工业软件开发是plc开发吗
r730服务器主备怎么看
服务器密码修改方法图片
云数据库全球前五
河北企业党性体检软件开发
数据库技术服务市场分析
写一条记录到数据库
阿里云数据库图片大全
英文面试软件开发
曹妃甸区项目网络技术售后服务
网络安全分享屏幕
网络安全防范工作专题会
宁波伽伽互联网科技有限公司
手机上服务器证书不受信任
数据库2005不兼容
服务器日常维护试卷
数据库字段原子操作
软件开发要怎样的人
网络安全公司西安