文档章节

spark dataframe 全局排名优化

厮以为
 厮以为
发布于 08/08 23:45
字数 354
阅读 187
收藏 0

spark提供给我们的全局排序,默认情况下只有spark-sql提供的窗口函数,但如果窗口是整个表eg:row_number() over(order by a) 会存在严重的数据倾斜,下面我们演示了俩种方式,例2是例1的改进方式

例1:Spark-SQL形式

df = spark.createDataFrame(
[{"b": 2, "c": 4, "a": 3}, {"a": 2, "c": 6, "b": 3}, {"a": 5, "c": 2, "b": 3}, {"a": 1, "c": 3, "b": 3}])
df.show()
df.createOrReplaceTempView("temp")
resDf1=spark.sql("select *,row_number() over(order by a) rank from temp")
resDf1.show()

例2:Spark-command 形式

def f(rows):
	for row in rows:
		t = row[0].asDict()
		#排名首位是0,正常情况下是1,故这边加一
		t["id"] = long(row[1]) + 1
		yield t
# 通过zipWithIndex获取排名,但是首位是0
# ascending=False 降序
indexrdd = df.select("*").rdd.sortBy(ascending=False, numPartitions=3,keyfunc=lambda x: x.a).zipWithIndex().mapPartitions(lambda x: f(x))
print indexrdd.collect()
indexdf = spark.createDataFrame(indexrdd)
indexdf.show()
dp = spark.createDataFrame(df.rdd.sortBy(ascending=True, numPartitions=3, keyfunc=lambda x: x.c).zipWithIndex())
dp.show()

例子2的基本原理 先进行一定的采样sample,然后确定数据边界,最终将数据根据这些边界进行分区,也就是所谓的rangepartition。在计算每个分区的顺序

© 著作权归作者所有

共有 人打赏支持
厮以为
粉丝 30
博文 63
码字总数 84931
作品 0
深圳
架构师
私信 提问
加载中

评论(1)

我还在等你回家
转发一下
【Spark】Spark SQL, DataFrames and Datasets Guide(翻译文,持续更新)

本文主要是翻译Spark官网Spark SQL programming guide 。只能保证大概意思,尽量保证细节。英文水平有限,如果有错误的地方请指正,轻喷。目录导航在右上角 Spark SQL、DataFrames 和 Datase...

跑呀跑
09/19
0
0
Spark 2.0 时代全面到来 —— 2.0.1 版本发布

距离Spark 2.0.0发布两个月后,Spark 2.0.1版本发布了,这是一个修正版本,共处理了300多个Issue,涉及spark稳定性和bug等方面的修复 ,它的发布意味着Spark 2.0接近生产环境使用要求,想要尝...

达尔文
2016/10/08
13.1K
22
Apache Spark 2.0 最快今年4月亮相

1月才刚释出1.6版的大数据技术Spark,下一个2.0版本预计4、5月释出,将提供可运行在SQL/Dataframe上的结构化串流即时引擎,并统一化Dataset及DataFrame 大数据技术Spark今年1月才刚释出1.6版...

oschina
2016/02/29
3K
16
Spark 从零到开发(五)初识Spark SQL

Spark SQL是用于结构化数据处理的Spark模块。 与基本的Spark RDD API不同,Spark SQL提供的接口为Spark提供了有关数据结构和正在执行的计算的更多信息。 在内部,Spark SQL使用此额外信息来执...

一个入门攻城狮
11/20
0
0
Spark Core组件:RDD、DataFrame和DataSet

1. 介绍 spark生态系统中,Spark Core,包括各种Spark的各种核心组件,它们能够对内存和硬盘进行操作,或者调用CPU进行计算。 spark core定义了RDD、DataFrame和DataSet spark最初只有RDD,D...

wsc449
01/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
12
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
19
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
18
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
9
0
dubbo 搭建与使用

官网:http://dubbo.apache.org/en-us/ 一,安装监控中心(可以不安装) admin管理控制台,monitor监控中心 下载 bubbo ops 这个是新版的,需要node.js环境,我没有就用老版的了...

小兵胖胖
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部