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查 ...
随机推荐
- Graph - leetcode [图]
207. Course Schedule 有向图的环检测 bool canFinish(int numCourses, vector<pair<int, int>>& ...
- 【 VS 插件开发 】三、Vs插件简单功能的实现
[ VS 插件开发 ]三.Vs插件简单功能的实现
- JFrame
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class KeyDemo extends JFram ...
- 转:iOS 屏幕适配,autoResizing autoLayout和sizeClass图文详解
1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基 ...
- C# 实现客户端程序自动更新
看到一篇不错的帖子,可能以后会用到,果断收藏 文章来源 博客园jenry(云飞扬)http://www.cnblogs.com/jenry/archive/2006/08/15/477302.html ...
- 学习smail注入遇到的坑
1.将需要被反编译的apk包解开之后,找到MainActivity,然后在OnCreate中添加需要加入注入的smail代码: Java代码: /** * 获取Android id * * @para ...
- 学习笔记(C++Primer)--易错点总结(Chapter2)
2.1.2Type Conversions(1/10/2017) 1.If we assign an out-of-range value to an object of unsigned type, ...
- Java Day03 面向对象程序设计
1.面向对象 面向对象是指一种程序设计泛型,同时也是一种程序开发的方法. 2.类 类是一种抽象的概念,类中包含了数据与对数据的操纵. 具有相同特性(数据元素)和行为(功能)的对象的抽象就是类.类是对象 ...
- read/sysread区别
use warnings; use strict; my $readbuff; my $sysreadbuff; ); print "read get:$readbuff\n"; ...
- centos7下编译安装nginx1.10
1.下载pcre 下载地址:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 解压到/usr/local/pcre8.3.9 2.下载ope ...