spark-streming 中调用spark-sql时过程遇到的问题
在spark-streming 中调用spark-sql时过程遇到的问题
使用版本:spark-2.1.0
JDK1.8
1. spark-sql中对limit 的查询结果使用sum() 聚合操作不生效
如下sql会报出 top10_sts 存在异常。
SELECT
SUM(mtime_show_times) AS top10_sts
FROM
tb_movie_bo_pt_params
ORDER BY mtime_persion_times DESC
LIMIT 10
改成如下sql逻辑正常执行
SELECT
SUM(mtime_show_times) AS top10_sts
FROM
(SELECT
*
FROM
tb_moive_bo_pt_params
ORDER BY mtime_persion_times DESC
LIMIT 10) a
2. spark-sql中使用union 连接两个表;再将union结果进行过滤 != 操作不生效问题。
SELECT
'ALL_MOVIE' AS movie_id,
SUM(no_sale) AS persion_times,
COUNT(1) AS show_times
FROM
tb_bo_real_time
WHERE biz_date = '#{var_date}'
UNION
SELECT
'ALL_MOVIE2' AS movie_id,
'2017-12-31' AS persion_times,
'1123' AS show_times
基于union 的结果生成的临时表 temp_tb;
执行如下操作得不到预期的结果:
SELECT
*
FROM
temp_tb
WHERE movie_id != 'ALL_MOVIE'
这 可能是spark的bug,经过调试后发现,使用 union关键字之后就会出现该问题。
测试发现有2种解决办法:
- 将uinon的两部分分别使用sql计算,之后在使用RDD的union操作,将两个数据集合合并起来。
val movie_summary_realtime_Df = sparkSession.sql(config.getProperty("test_union_sql").replace("#{var_date}", biz_date))
movie_summary_realtime_Df.collect().foreach(println)
println("-----------movie_summary_realtime_all_Df------------------")
val movie_summary_realtime_all_Df = sparkSession.sql(config.getProperty("test_union_sql_all").replace("#{var_date}", biz_date))
movie_summary_realtime_all_Df.collect().foreach(println)
println("-----------union_Df------------------")
val unioDf = movie_summary_realtime_Df.union(movie_summary_realtime_all_Df)
unioDf.collect().foreach(println)
unioDf.createOrReplaceTempView("tb_bo_movie_summary_realtime")
println("-----------test filter------------------")
val test_DF = sparkSession.sql("SELECT movie_id FROM tb_bo_movie_summary_realtime WHERE movie_id != 'ALL_MOVIE'")
test_DF.collect().foreach(println)
- 将相关依赖表cache后,再进行sql操作。
val movie_summary_realtime_Df = sparkSession.sql(config.getProperty("tb_bo_movie_summary_realtime").replace("#{var_date}", biz_date))
movie_summary_realtime_Df.cache()
3. spark 内存快照的更新
def updateSeatMapState(moviesKey: String, seatMap: Option[JSONObject], state: State[JSONObject]) = {
var newValue:JSONObject = seatMap match {
case None => { val temp =state.get();temp;}
case _ => { state.update(seatMap.get);seatMap.get; }
}
val output = (moviesKey, newValue)
output
}
- 当前值Option[JSONObject] 有可能为none,state.update(none) 会有空指针异常,造成程序退出。
- 当前值Option[JSONObject] 为none时,有两种情况。一种是业务确实为空;另一种是当前key已经过期了。
不管那种情况,都不需要更新state的值。 - 如果一个state的可以过期了,再调用state.update()就会报出一个更新过期Key的异常,后程序退出。
- 状态值如果不设置过期,就会一直存在,系统长时间运行性能会越来越差,并出现内存溢出,而异常退出。
- 更新方法需要返回值。
java.lang.IllegalArgumentException: requirement failed: Cannot update the state that is timing out
at scala.Predef$.require(Predef.scala:224)
at org.apache.spark.streaming.StateImpl.update(State.scala:156)
at com.mtime.bigdata.bo.RealTimeBoxOfficeCluster$.updateSeatMapState(RealTimeBoxOfficeCluster.scala:110)
at com.mtime.bigdata.bo.RealTimeBoxOfficeCluster$$anonfun$6.apply(RealTimeBoxOfficeCluster.scala:72)
at com.mtime.bigdata.bo.RealTimeBoxOfficeCluster$$anonfun$6.apply(RealTimeBoxOfficeCluster.scala:72)
at org.apache.spark.streaming.StateSpec$$anonfun$1.apply(StateSpec.scala:181)
at org.apache.spark.streaming.StateSpec$$anonfun$1.apply(StateSpec.scala:180)
at
spark-streming 中调用spark-sql时过程遇到的问题的更多相关文章
- C#在父窗口中调用子窗口的过程(无法访问已释放的对象)异常,不存在从对象类型System.Windows.Forms.DateTimePicker到已知的托管提供程序本机类型的映射。
一:C#在父窗口中调用子窗口的过程(无法访问已释放的对象)异常 其实,这个问题与C#的垃圾回收有关.垃圾回收器管 理所有的托管对象,所有需要托管数据的.NET语言(包括 C#)都受运行库的 垃圾回收器 ...
- (转)C#在父窗口中调用子窗口的过程(无法访问已释放的对象)
C#在父窗口中调用子窗口的过程: 1. 创建子窗口对象 2. 显示子窗口对象 笔者的程序中,主窗体MainFrm通过菜单调用子窗口ChildFrm.在窗体中定义了子窗口对象,然后在菜单项点击事件中 ...
- 在易语言中调用MS SQL SERVER数据库存储过程方法总结
Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接返回(return)一个值,通过output ...
- C#中调用Windows API时的数据类型对应关系
原文 C#中调用Windows API时的数据类型对应关系 BOOL=System.Int32 BOOLEAN=System.Int32 BYTE=System.UInt16 CHAR=System. ...
- 又踩.NET Core的坑:在同步方法中调用异步方法Wait时发生死锁(deadlock)
之前在将 Memcached 客户端 EnyimMemcached 迁移 .NET Core 时被这个“坑”坑的刻骨铭心(详见以下链接),当时以为只是在构造函数中调用异步方法(注:这里的异步方法都是指 ...
- Titanium中调用ios组件时语言不是本地化的解决方法
用Titanium开发的ios应用中,当调用系统组件时,尽管手机已经设置了系统语言为中文,但那些组件的界面却仍为英文.比如调用iphone中的相册组件,其界面为: 那么怎么让它跟系统语言保持一致呢? ...
- react 在 componentWillMount() 中调用异步函数时,componentWillMount() finishes after render()
刚开始使用 react,很多属性.方法不是很熟.在此记录下我所遇到的问题及解决方法. 我在 componentWillMount() 中调用了一个异步函数,在返回结果中调用 this.setState ...
- 项目中调用ExcelCom组件时的配置流程
异常提示如下: Microsoft Office Excel 不能访问文件“*.xls”. 可能的原因有: 1 文件名称或路径不存在. 2 文件正被其他程序使 ...
- Spark DataFrame中的join使用说明
spark sql 中join的类型 Spark DataFrame中join与SQL很像,都有inner join, left join, right join, full join; 类型 说明 ...
- FORM中调用JAVA组件
调用方式: 链接:可以在一个数据块中创建专门的 Bean Area项,使用 Implementation Class 特性链接到J a v a B e a n,使用W h e n - C u s t ...
随机推荐
- 01:zabbix监控redis
一.zabbix 自动发现并监控redis多实例 1.1 编写脚本 1.1.1 redis_low_discovery.sh 用于发现redis多实例 [root@redis02 homed]# ca ...
- 分析学习MYSQL源代码需要哪些方面的知识呢?
分析学习MYSQL源代码需要哪些方面的知识呢? 哪些书籍或网站对这方面有帮助呢? 60d
- multipart/form-data boundary 说明
含义 ENCTYPE="multipart/form-data" 说明: 通过 http 协议上传文件 rfc1867协议概述,jsp 应用举例,客户端发送内容构造 1.概述在最初 ...
- python beautifulsoup爬虫
爬虫这个听起来很 hack 的名字,是我学习 python 的诱因.当 python 基础学习到一定程度(基本语法,数据类型掌握) 就可以开启自己的小爬虫了.毕竟实践才是提高的最快途径.废话说完了,下 ...
- centos7.3给squid搭建代理服务器添加认证nginx
1先安装 nginx 这里是教程 点击查看 2 然后 使用命令 创建用户 htpasswd -c /etc/nginx/passwd.db baker 输入密码 提示添加完毕 3 查看加密后的用户和 ...
- IIS 禁止访问:在 Web 服务器上已拒绝目录列表
webconfig <configuration> <system.webServer> <directoryBrowse enabled="true" ...
- MySQL 触发器示例
简介: MySQL 触发器 这次实验是在一台 MySQL Slave 上进行的,事实证明:从库添加数据库.表.插入.删除数据等,不会导致主从失败. 一.创建实验数据库.表 mysql > cre ...
- FullBg-网页图片背景自适应大小
网页背景自适应大小jQuery插件 fullBG.js http://cbavota.bitbucket.org/fullbg/ HTML <img id="background& ...
- 开源地理空间基金会OSGeo简介
开源地理空间基金会 OSGeo 相关站点: OSGeo官方站点:http://www.osgeo.org/home OSGeo中国中心:http://www.osgeo.cn/ OSGeo GitHu ...
- java.io.CharConversionException: Not an ISO 8859-1 character:
java.io.CharConversionException: Not an ISO 8859-1 character: XXX 这个问题可能是因为outputstream输出中文字造成的影响. r ...