当前位置: 首页 > news >正文

杭州网站设计 site重庆百度seo整站优化

杭州网站设计 site,重庆百度seo整站优化,品牌网站设计打造,吉安网站推广1. 背景 spark默认的jdbc只会用单task读取数据,读取大数据量时,效率低。 2. 解决方案 根据分区字段,如日期进行划分,增加task数量提升效率。 /*** 返回每个task按时间段划分的过滤语句* param startDate* param endDate* param …

1. 背景

spark默认的jdbc只会用单task读取数据,读取大数据量时,效率低。

2. 解决方案

根据分区字段,如日期进行划分,增加task数量提升效率。

  /*** 返回每个task按时间段划分的过滤语句* @param startDate* @param endDate* @param threadCount* @return*/def getPredicateDates(startDate: String, endDate: String, threadCount: Int): Array[String] = {getPredicates(startDate, endDate, threadCount).map(x=>s"recordDate>='${x._1}' and recordDate <='${x._2}'")}/*** 将startDate到endDate间的日期,根据给定的threadCount参数,做时间段划分,例如:* getPredicates("2017-01-01", "2017-01-31", 10)* 返回:* 2017-01-01 -> 2017-01-04* 2017-01-05 -> 2017-01-08* 2017-01-09 -> 2017-01-12* 2017-01-13 -> 2017-01-16* 2017-01-17 -> 2017-01-20* 2017-01-21 -> 2017-01-24* 2017-01-25 -> 2017-01-28* 2017-01-29 -> 2017-01-31** @param startDate   开始日期* @param endDate     结束日期* @param threadCount 线程数* @return 包含各个连续时段的数组*/def getPredicates(startDate: String, endDate: String, threadCount: Int): Array[(String, String)] = {val dayDiff = DateTimeUtils.rangeDay(startDate, endDate)val buff = new ArrayBuffer[(String, String)]()if (dayDiff <= threadCount) {//天数差小于期望的线程数,则按照每天一个线程处理var tempDate = startDatewhile (tempDate <= endDate) {buff += (tempDate -> tempDate)tempDate = DateTimeUtils.dateAddOne(tempDate)}} else {//天数差大于期望的线程数,则按照线程数对时间段切分val offset = (dayDiff / threadCount).toIntvar tempDate = startDatewhile (DateTimeUtils.dateAddN(tempDate, offset) <= endDate) {buff += (tempDate -> DateTimeUtils.dateAddN(tempDate, offset))tempDate = DateTimeUtils.dateAddOne(DateTimeUtils.dateAddN(tempDate, offset))}if (tempDate != endDate) {buff += (tempDate -> endDate)}}buff.toArray}
DateTimeUtils工具类
import java.text.SimpleDateFormat
import java.util.{Calendar, Date, Locale}object DateTimeUtils {def rangeDay(startDateStr: String, endDateStr: String): Long = {val dateFormat: SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd")val startDate: Date = dateFormat.parse(startDateStr)val endDate: Date = dateFormat.parse(endDateStr)(endDate.getTime() - startDate.getTime()) / 1000 / 60 / 60 / 24}def dateAddOne(dateStr: String): String = {var dateFormat: SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd")var dateInfo: Date = dateFormat.parse(dateStr)var cal: Calendar = Calendar.getInstance()cal.setTime(dateInfo)cal.add(Calendar.DATE, 1)dateFormat.format(cal.getTime)}def dateAddN(dateStr: String, value: Int): String = {var dateFormat: SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd")var dateInfo: Date = dateFormat.parse(dateStr)var cal: Calendar = Calendar.getInstance()cal.setTime(dateInfo)cal.add(Calendar.DATE, value)dateFormat.format(cal.getTime)}
}

举例

    val startDate = DateTimeUtils.dateAddN(calcDate,-365) //获取计算日期一年前的日期作为开始时间val predicates= getPredicateDates(startDate,calcDate,12) //分12个task读取,提高性能val url = PropUtils.getProxyJdbc() //jdbc连接的代理(需按自己的项目实现)val res = spark.read.jdbc(url, tableName, predicates,PropUtils.getProperties()) 

3. 实验及结论

使用1个节点 8核16G的Clickhouse数据库,spark从clickhouse读取近4亿行数据。

单Task运行时间:14min

按日期划分成12个Task,运行时间:1.6min

结论:性能提升88.6%

http://www.hkea.cn/news/418/

相关文章:

  • 品牌网站设计建设自动点击关键词软件
  • 莱芜 做网站 公司百度没有排名的点击软件
  • 手工艺品网站模板温州网站优化推广方案
  • 学短视频剪辑与制作简述seo和sem的区别
  • 电子商务网站建设与维护中职教材seo百度发包工具
  • 杭州市建委网站重庆森林经典台词罐头
  • 怎样设计电子商务网站的建设重庆好的seo平台
  • 360云盘做 网站图片服务器山西seo基础教程
  • 中国国家城乡建设委员会网站百度推广时间段在哪里设置
  • 自己做网站要买什么成都公司建站模板
  • php网站开发 招聘推广app拉人头赚钱
  • WordPress背景图片自适应网络优化工程师骗局
  • 网站推广制作教程北京aso优化
  • 网站建设公司违法做个网页价格多少
  • 群站wordpress国际新闻报道
  • 搭建网站账户系统济南seo优化公司
  • 周口城乡建设局网站最新营销模式有哪些
  • 用flash做网站超链接给你一个网站seo如何做
  • app 网站可以做的免费推广网店培训机构
  • 郑州做网站推广外包百度收录提交入口网址是什么
  • 网站维护中页面设计头条权重查询站长工具
  • 定服装网站建设sem营销
  • 织梦怎么做网站卖友情链接的哪来那么多网站
  • 网站开发 方案 报价单长春网络推广公司哪个好
  • 阿里巴巴上怎样做自己的网站微信营销的特点
  • 整站排名百度推广怎么弄
  • 萧江做网站山东一级造价师
  • 模板网站怎么做灰色关键词排名
  • 网站开发类型什么意思摘抄一小段新闻
  • 网站关键词在哪昆山优化外包