千家信息网

spark union 特别注意

发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,今天遇到一个很诡异的问题。表Auseridhousecoderesctimeu1code111301表Buseridhousecoderesctimeu2code201302表Cuseridnamet
千家信息网最后更新 2024年11月26日spark union 特别注意

今天遇到一个很诡异的问题。

表A

useridhousecoderesctime
u1code111301

表B

useridhousecoderesctime
u2code201302

表C

useridnametypetime
u1大海01303

然后对表A进行处理操作

表A.createOrReplaceTempView("t1");
JavaRDD rdd=removeDuplicateData(t1);
t1= s.createDataFrame(rdd, HistoryModelExt.class);

然后查看t1, t1.show()

u1code111301
........

数据还在,然后 B union A 然后 join C(通过userid), 理论上应该是有结果的,感觉就像1+1=2 这么肯定,但是还真没有数据,非常诧异。

刚开始以为是自己程序哪里有问题,苦苦寻找,发现一切正常, 最后回到 union这个方法上。

为了看清楚前因后果, 我把B union A的数据打印了出来,发现了一个奇怪的事情

useridhousecoderesctime
u2code201302
1301code11u1

当时一下子就明白为什么join 没有数据了, A的schema已经与B不一致了。
原来 union函数并不是按照列名合并,而是按照位置合并。
但是在JavaRDD rdd=removeDuplicateData(t1); 这步之前还是一致的,为什么转成java对象后,schema就变了呢

查看源代码

  /**   * 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安全错误 数据库的锁怎样保障安全 网络安全演讲比赛班会 网络安全等级保护四级 网络安全设备日志融合 网络技术攻防微盘 工业企业数据库最早到哪一年 四川安卓软件开发要多少钱 mysql 数据库工具 苏州车载网络技术有哪些 网络技术实训软件 数据库订单号自动生成 中国娱乐软件开发公司排行 东华大学网络安全考试 中兴智能家庭软件开发1部 新一代信息网络安全支持通信方式 我的世界服务器僵尸攻击 腾讯网络安全怎么样 室内数字化软件开发 软件开发单元特点 软件开发员工转正自我鉴定 什么数据库可以有效存取视频 软件开发工程师助理是什么 第六章网络安全技术测试题 INFORMIX下载软件开发 滨湖区创新网络技术销售厂 全景影像软件开发工程师 软件开发dr是啥意思 和平精英怎么升级服务器 网络安全法共七章多少条 网络安全手抄报简单的文字 信息网络安全侦查是公安专业吗
0