Spark 倾斜连接
- 业务数据本身的特性
- Key分布不均匀
- 建表时考虑不周
- 某些SQL语句本身就有数据倾斜
【数据倾斜的解决方案】
------
------ 
【SPARK 代码】
package spark
import org.apache.spark.{SparkContext, SparkConf}
/**
* Created by Liu Jinhong on 2016/5/27.
*/
object TiltJoin {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("TiltJoin").setMaster("local")
val sc = new SparkContext(conf)
val line1 = sc.textFile("E:\\testdoc\\a.txt")
val line2 = sc.textFile("E:\\testdoc\\b.txt")
val table1 = line1.map(_.split(' ')).map(x => (x(0), x(1)))
val table2 = line2.map(_.split(' ')).map(x => (x(0), x(1)))
//对table1进行采样
val sample = table1.sample(false, 0.3, 9).map(x => (x._1, 1)).reduceByKey(_+_)
//找到table1中的倾斜数据
val maxrowKey = sample.map(x => (x._2, x._1)).sortByKey(false).take(1).toSeq(0)._2
//把table1拆分成两个表
val maxrowTable = table1.filter(_._1 == maxrowKey)
val maintable = table1.filter(_._1 != maxrowKey)
val result = sc.union(maxrowTable.join(table2), maintable.join(table2)).foreach(println(_))
}
}
【涉及到的函数】
val maxrowKey = sample.map(x => (x._2, x._1)).sortByKey(false).take(1).toSeq(0)._2
上诉代码相当于实现了按照value降序排序。
Spark 倾斜连接的更多相关文章
- Spark Streaming连接TCP Socket
1.Spark Streaming是什么 Spark Streaming是在Spark上建立的可扩展的高吞吐量实时处理流数据的框架,数据可以是来自多种不同的源,例如kafka,Flume,Twitte ...
- 【spark】连接Hbase
0.我们有这样一个表,表名为Student 1.在Hbase中创建一个表 表明为student,列族为info 2.插入数据 我们这里采用put来插入数据 格式如下 put ‘表命’,‘行键’, ...
- Spark Streaming连接Kafka的两种方式 direct 跟receiver 方式接收数据的区别
Receiver是使用Kafka的高层次Consumer API来实现的. Receiver从Kafka中获取的数据都是存储在Spark Executor的内存中的,然后Spark Streaming ...
- Spark join连接
内链接
- Spark SQL 官方文档-中文翻译
Spark SQL 官方文档-中文翻译 Spark版本:Spark 1.5.2 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 Data ...
- 《Spark大数据处理:技术、应用与性能优化 》
基本信息 作者: 高彦杰 丛书名:大数据技术丛书 出版社:机械工业出版社 ISBN:9787111483861 上架时间:2014-11-5 出版日期:2014 年11月 开本:16开 页码:255 ...
- 《Spark大数据处理:技术、应用与性能优化》【PDF】 下载
内容简介 <Spark大数据处理:技术.应用与性能优化>根据最新技术版本,系统.全面.详细讲解Spark的各项功能使用.原理机制.技术细节.应用方法.性能优化,以及BDAS生态系统的相关技 ...
- 《Spark大数据处理:技术、应用与性能优化》【PDF】
内容简介 <Spark大数据处理:技术.应用与性能优化>根据最新技术版本,系统.全面.详细讲解Spark的各项功能使用.原理机制.技术细节.应用方法.性能优化,以及BDAS生态系统的相关技 ...
- Spark记录-SparkSql官方文档中文翻译(部分转载)
1 概述(Overview) Spark SQL是Spark的一个组件,用于结构化数据的计算.Spark SQL提供了一个称为DataFrames的编程抽象,DataFrames可以充当分布式SQL查 ...
随机推荐
- 约瑟夫问题-Josephus--及实例说明
//---我保证所有的代码都已经通过测试---// 类似约瑟夫的问题又称为约瑟夫环.又称“丢手绢问题”. 这个问题来自于这样的一个关于著名犹太历史学家 Josephus传说: 在罗马人占领乔塔帕特后, ...
- THINKCMF-NGINX伪静态
location / { index index.php index.html index.htm; if (!-e $request_filename) { rewrite ^/index.php( ...
- CentOS 7将Python 2.X.X升级到Python 3.X.X
# cd /usr/local/src/ # ls Python-.tgz # .tgz # ls Python- Python-.tgz # cd Python-/ # yum install gc ...
- spring 加载多个资源文件
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.Prop ...
- Gentoo双网卡同时启用上内外网
引言:本文配置网络通过 OpenRC/netifrc 方法(net.*scritps)配置. 外网网卡:enp3s4 内网网卡:enp2s0 外网地址(通过路由器) IP: 192.168.1.10 ...
- Chapter 17_3 table的默认值
对象属性 有很多情况需要把有些属性绑定到某个对象,例如:函数与其名称.table的默认值.数组大小等... 当对象是一个table时,可以通过适当的key将属性存储在这个table中. 如果对象不是一 ...
- tcp协议栈
TCP/IP是互联网的核心协议,也是大多数网络应用的核心协议.就前面一段时间面试中问到的TCP/IP问题,这里给出一个简单的小结. TCP由RFC793.RFC1122.RFC1323.RFC20 ...
- ural 1100. Final Standings(数据结构)
1100. Final Standings Time limit: 1.0 secondMemory limit: 16 MB Old contest software uses bubble sor ...
- 私有云Mariadb集群搭建
MariaDB作为Mysql的一个分支,在开源项目中已经广泛使用,例如大热的openstack,所以,为了保证服务的高可用性, 同时提高系统的负载能力,集群部署是必不可少的. MariaDB Gale ...
- 前端好的工具集推荐 lodash
原来用 backbone 的时候, 感觉 underscore 是一个好的工具集,顿时感觉不错,不用自己一直去封装一些组件. 直到我遇到了 lodash,一只发现 web 项目中有依赖这个库的,但是一 ...