spark union 特别注意
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,今天遇到一个很诡异的问题。表Auseridhousecoderesctimeu1code111301表Buseridhousecoderesctimeu2code201302表Cuseridnamet
千家信息网最后更新 2026年10月31日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安全错误
数据库的锁怎样保障安全
互联网科技公司的优势
互联网科技社
美国互联网科技
为想互联网科技
互联网科技logo设计
奔汉互联网科技
兼蜜互联网科技
郑州华宇互联网科技
现代科技和互联网有关系吗
互联网科技有哪些公司
佳云科技和互联网广告
全球顶尖互联网科技公司
赶超互联网科技 微信多开
互联网科技创新的路径
陕西九四连强互联网科技有限公司
中国互联网公司的科技投入
唐山双旺合互联网科技产业园
科技互联网公司两年变化
深圳互联网科技园地址
安徽九吞吴互联网科技有限公司
科技互联网产品
科技互联网技术
郑州华宇互联网科技
互联网科技项目计划书材料类
哈尔滨屹滨互联网科技有限公司
中国互联网公司排名锤子科技
元气玛特互联网科技公司是外包吗
梅州GM互联网络科技有限公司
2021世界互联网领先科技成果发布
互联网科技企业文化