首页 > 其他分享 >spark代码示例---explode()炸裂函数使用

spark代码示例---explode()炸裂函数使用

时间:2023-11-02 13:14:10浏览次数:50  
标签:--- string nullable -- 示例 private explode true col

数据结构,及bean的结构

root
 |-- eventName: string (nullable = true)
 |-- itmeList: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- did: string (nullable = true)
 |    |    |-- dno: long (nullable = true)
 |    |    |-- dtm: long (nullable = true)
 |    |    |-- eventName: string (nullable = true)
 |    |    |-- kind: integer (nullable = true)
 |    |    |-- logdate: string (nullable = true)
 |    |    |-- tid: string (nullable = true)
 |    |    |-- typ: long (nullable = true)
 |    |    |-- val: string (nullable = true)
 |-- logdate: string (nullable = true)
 |-- tag: string (nullable = true)
 |-- tid: string (nullable = true)

对上面数据结构的说明:第三层bean结构

root层的数据结构:重要把数据集放在一起,并且给每个itemlist声明一个tag
public class HiveEtlItmeTableSchemaBean extends BasicBean implements Serializable {
    /**
     * tag
     */
    private String tag ;
    /**
     * 数据集
     */
    private List<HiveEtlTableSchemaBean> itmeList ;
}

对上面数据结构的说明:第二层bean结构

itmeList是一个list集合,要是炸裂函数获取每个元素,元素的数据结构如下
public class HiveEtlTableSchemaBean extends BasicBean implements Serializable {
    /**
     * 编号
     */
    private String did ;
    /**
     * 数据号
     */
    private long dno ;
    /**
     * 数据时间
     */
    private long dtm ;
    /**
     * 大类
     */
    private int kind ;
    /**
     * 小类
     */
    private long typ ;
    /**
     * 值
     */
    private String val ;
}

代码编写查询数据的方式

//遍历每个车的所有数据项,并返回输出的数据项和其对应的标识
Dataset<Row> etlDataSet = resSet.flatMap(new FlatMapFunction<OrgBean, HiveEtlItmeTableSchemaBean>() {
    @Override
    public Iterator<HiveEtlItmeTableSchemaBean> call(OrgBean orgBean) throws Exception {
        List<HiveEtlItmeTableSchemaBean> catItme = new ArrayList<>();
        ...
        return catItme.iterator();
    }
}, Encoders.bean(HiveEtlItmeTableSchemaBean.class)).toDF();
//============================================
//查询数据
Dataset<Row> rowDataset = etlDataSet.where("tag='canlist'")
.select(explode(new Column("itmeList")))
//.where("col.val!=null and col.did!=null and col.dno!=null and col.dtm !=null and col.kind !=null and col.typ!=null")
.select("col.did", "col.dno", "col.dtm", "col.kind", "col.typ", "col.val")
.toDF("did", "dno", "dtm", "kind", "typ", "val");
// .write().option("compression", CompressionKind.ZSTD.name()).mode(SaveMode.Overwrite).orc("/data/tmp");
rowDataset.printSchema();
rowDataset.show(false);

 

 

 

  

 

标签:---,string,nullable,--,示例,private,explode,true,col
From: https://www.cnblogs.com/zyanrong/p/17805062.html

相关文章

  • 11-2打卡
    今天学习了prim算法最小生成树#include<iostream>#defineMAX1000000usingnamespacestd;structgraph{ char*vex; intvexnum; int**arc;};structEdge{ charvex; intweight;};//若edge[i]为0则代表已加入u集合(最小生成树集合)Edge*initedge(graph*g,......
  • centos7 gcc版本升级--便捷方法
    问题提出:  虚拟机下面安装的centos7系统,默认gcc是4.8.5版本。  想升级到最新版本,但是又不想花很多时间去编译源码。有没有一种更加便捷的升级方法呢?   升级步骤: 1.安装scl仓库sudoyuminstallcentos-release-scl2.安装所需版本的GCC:sudoyuminstall......
  • NPOI设置样式示例
    HSSFWorkbookworkbook=newHSSFWorkbook();MemoryStreamms=newMemoryStream();ISheetsheet=workbook.CreateSheet();IRowheaderRow=sheet.CreateRow(0);HSSFCellStyleHeaderCellStyle=(HSSFCellStyle)w......
  • xxl-job默认accessToken命令执行漏洞复现
    起因:昨天看见微步发布XXL-JOB默认accessToken身份绕过漏洞,之前hw期间遇到过几次,都没弱口令和未授权,对其有点印象,遂复现一下。漏洞影响:2.3.1和2.4 环境准备:1、下载即可:https://github.com/xuxueli/xxl-job/releases/tag/2.4.0将其导入IDEA中,即可进行分析。环境要求:Maven......
  • 产学研融合聚焦技术难点,2023年度“CCF-蚂蚁绿色计算&隐私计算专项科研基金”正式发布
    10月26日,第二十届中国计算机大会(CNCC2023)于沈阳举行,以“发展数字基础设施,支撑数字中国建设”为主题,邀请产业界及学术界各方代表参会并开展分享与交流。大会期间,2023年度CCF-蚂蚁绿色计算专项科研基金与CCF-蚂蚁隐私计算专项科研基金于蚂蚁集团主办的“CCF-蚂蚁科研基金及产学研合......
  • Windows常用运维命令汇总-学习笔记
    基本网络命令ipconfig/all                                     查看IP地址whoami                                           查询账号所属权限whoami/all               ......
  • 型态学--5.顶帽运算和黑帽运算
    ......
  • P1802-DP【橙】
    1.又是一道因为写了异常剪枝而调了好久的题,以后再也不写异常剪枝了,异常情况压根不该出现,所以针对出现的异常情况进行补救的异常剪枝是一种很容易出错的行为,做为两手准备也就罢了,但第一次写成的代码必须能在没有异常剪枝的情况下算出正确结果才行!2.还提出了一个专门针对记搜的编码......
  • pytest + yaml 框架 -39.多账号操作解决方案
    前言最近有小伙伴提到,有写场景需要用到2个账号来回切换操作该如何解决。(备注:从v1.2.4以后新版本不再公开,新功能内部VIP学员可以使用,公开版本仅解决bug,不提供新功能了。)先获取账号token前面教程有讲到全局登录一次,后面所有的请求都会拿着全局登录的账号token去访问请求。......
  • 花费最大金额-数组
    题目:双十一众多商品进行打折销售,小明想购买自己心仪的一些物品,但由于受购买资金限制,所以他决定从众多心仪商品中购买三件,而且想尽可能的花完资金,现在请你设计一个程序帮助小明计算尽可能花费的最大资金数额。输入描述输入第一行为一维整型数组M,数组长度小于100,数组元素记录单个......