基于sparksql collect_list的udf定义踩坑
多条collect_list,然后将collect_list的结果concat起来,最初使用的是concat_ws(),但是发现超过4个collect_list就会报错,
select concat_ws("|", collect_list(concat_ws(',',n_cgi_1,ltencrsrp_1)), collect_list(concat_ws(',',n_cgi_2,ltencrsrp_2)), collect_list(concat_ws(',',n_cgi_3,ltencrsrp_3)), collect_list(concat_ws(',',n_cgi_4,ltencrsrp_4)), collect_list(concat_ws(',',n_cgi_5,ltencrsrp_5)), collect_list(concat_ws(',',n_cgi_6,ltencrsrp_6))) as result from test group by id,name;
于是考虑自定义UDF函数。
collect_list函数在hive中返回值类型为array<T>,对应java的arrayList<T>,但是在写spark UDF时候报错:
Spark java.lang.ClassCastException: scala.collection.mutable.WrappedArray$ofRef cannot be cast to java.util.ArrayList
选择了一个不够牛逼但是很方便的方式,样例代码如下:
package com.kong.test.UDF; import org.apache.spark.sql.api.java.UDF5; import scala.collection.mutable.WrappedArray; public class TestArray implements UDF5<WrappedArray<String>, WrappedArray<String>, WrappedArray<String>, WrappedArray<String>, WrappedArray<String>, String> { private static final long serialVersionUID = 1L; //将array中的元素取出来,并以|隔开 public String call(WrappedArray<String> t1, WrappedArray<String> t2, WrappedArray<String> t3, WrappedArray<String> t4, WrappedArray<String> t5) throws Exception { StringBuffer sb = new StringBuffer(); for (int i = 0; i < t1.length(); i++) { String ele = t1.apply(i); System.out.println(ele); if(!"".equals(ele)){ sb.append(ele).append("|"); } } for (int i = 0; i < t2.length(); i++) { String ele = t2.apply(i); System.out.println(ele); if(!"".equals(ele)){ sb.append(ele).append("|"); } }; for (int i = 0; i < t3.length(); i++) { String ele = t3.apply(i); System.out.println(ele); if(!"".equals(ele)){ sb.append(ele).append("|"); } }; for (int i = 0; i < t4.length(); i++) { String ele = t4.apply(i); System.out.println(ele); if(!"".equals(ele)){ sb.append(ele).append("|"); } }; for (int i = 0; i < t5.length(); i++) { String ele = t5.apply(i); System.out.println(ele); if(!"".equals(ele)){ sb.append(ele).append("|"); } }; System.out.println(sb.toString()); String res = sb.toString(); String res1 = res.substring(0, res.length()-1); return res1; } }
基于sparksql collect_list的udf定义踩坑的更多相关文章
- NET Core2.0 Memcached踩坑,基于EnyimMemcachedCore整理MemcachedHelper帮助类。
DotNetCore2.0下使用memcached缓存. Memcached目前微软暂未支持,暂只支持Redis,由于项目历史原因,先用博客园开源项目EnyimMemcachedCore,后续用到的时 ...
- Asp.Net Core 2.0 项目实战(5)Memcached踩坑,基于EnyimMemcachedCore整理MemcachedHelper帮助类。
Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...
- 基于JQuery可拖动列表格插件DataTables的踩坑记
前言 最近项目中在使用能够拖动列调整列位置顺序的表格插件---DataTables,这也是目前我找到的唯一一种存在有这种功能的插件. 在查找使用方法的过程中发现可用案例并不多,且大多言语不详.本文将全 ...
- JavaScript 踩坑心得— 为了高速(下)
一.前言 本文的上一篇 JavaScript 踩坑心得- 为了高速(上) 主要和大家分享的是 JavaScript 使用过程中的基本原则以及编写过程中的心得分享,本文主要和大家聊聊在各个使用场景下的 ...
- Spark踩坑记——从RDD看集群调度
[TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了 ...
- Spark 1.6升级2.x防踩坑指南
原创文章,谢绝转载 Spark 2.x自2.0.0发布到目前的2.2.0已经有一年多的时间了,2.x宣称有诸多的性能改进,相信不少使用Spark的同学还停留在1.6.x或者更低的版本上,没有升级到2. ...
- 『审慎』.Net4.6 Task 异步函数 比 同步函数 慢5倍 踩坑经历
异步Task简单介绍 本标题有点 哗众取宠,各位都别介意(不排除个人技术能力问题) —— 接下来:我将会用一个小Demo 把 本文思想阐述清楚. .Net 4.0 就有了 Task 函数 —— 异步编 ...
- rsyslog磁盘辅助(Disk-Assisted)模式踩坑记
最近公司为方便tracing.排查, 搞全链路日志收集,而我手上的10亿+pv的动态前端服务必然在考虑之列. 之前呢. 都是运维定制的收集方式: 如上图,rsyslog push kafka, 优点嘛 ...
- lombok踩坑与思考
虽然接触到lombok已经有很长时间,但是大量使用lombok以减少代码编写还是在新团队编写新代码维护老代码中遇到的. 我个人并不主张使用lombok,其带来的代价足以抵消其便利,但是由于团队编码风格 ...
随机推荐
- Spring Boot微服务电商项目开发实战 --- 基础配置及搭建
根据SpringBoot实现分布式微服务项目近两年的开发经验,今天决定开始做SpringBoot实现分布式微服务项目的系列文章,帮助其他正在使用或计划使用SringBoot开发的小伙伴们.本次系列文章 ...
- linux svn 中文 https://my.oschina.net/VASKS/blog/659236
https://my.oschina.net/VASKS/blog/659236 设置服务器: export LC_ALL=zh_CN.UTF-8长久之计, echo export LC_ALL=zh ...
- JavaScript函数及闭包
前面一片文章讲到过一点函数,了解到每声明一个函数就会产生一个作用域.而外面的作用域访问不了里面的作用域(把里面的变量和函数隐藏起来),而里面的可以访问到外面的.对于隐藏变量和函数是一个非常有用的技术. ...
- 个人永久性免费-Excel催化剂功能第49波-标准数据结构表转报表样式结果
中国的企业信息化,已经过去了20年,企业里也产生了大量的数据,IT技术的信息化管理辅助企业经营管理也已经得到广泛地认同,现在就连一个小卖部都可以有收银系统这样的信息化管理介入.但同时也有一个很现实的问 ...
- jenkins +Jmeter 完成分布式性能测试
1.Jmeter 压测机器配置. 下载Jmeter 版本:https://jmeter.apache.org/download_jmeter.cgi 我下的是5.1.1 将下载后的版本进行解压. ...
- 浅谈单点登陆(SSO)
背景 在企业发展初期,企业使用的系统很少,通常一个或者两个,每个系统都有自己的登录模块,运营人员每天用自己的账号登录,很方便. 但随着企业的发展,用到的系统随之增多,运营人员在操作不同的系统时,需要多 ...
- APP爬虫(2)把小姐姐的图片down下来
APP爬虫(1)想学新语言,又没有动力,怎么办? 书接上文.使用appium在帖子列表界面模拟上划动作,捕捉不到列表的规律.上划结束后,列表只能获取到屏幕呈现的部分,而且下标还是从0开始的. 根据酸奶 ...
- 《PHP从入门到精通(第3版)》目录
一.基础知识 1.初识PHP 2.PHP环境搭建和开发工具 3.PHP语言基础 4.流程控制语句 5.字符串操作 6.正则表达式 7.PHP数组 8.PHP与Web页面交互 9.PHP与JavaScr ...
- asn1学习笔记
INTEGER 类型 1.由于这个类型在解码器中没有针对取值范围进行定义.所以在定义的时候要指定取值范围.如: errorcode::=ERRORCODE (1..12345678) ErrorCod ...
- tomcat常见面试题目问答Top10
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,它 ...