spark比java快吗_为什么我的Spark DataFrame比RDD慢得多?
这两个数字似乎都相对较高,并且不清楚如何创建 DataFrame 或测量时间,但一般来说,这样的差异可以通过与分区数量相比较少的记录来解释 .
spark.sql.shuffle.partitions 的默认值为200,表示您获得的任务数 . 使用50K记录时,启动任务的开销将高于从并行执行中获得的加速 . 让我们用一个简单的例子来说明 . 首先让我们创建一个示例数据:
import string
import random
random.seed(323)
def random_string():
n = random.randint(3, 6)
return (''.join(random.choice(string.ascii_uppercase) for _ in range(n)), )
df = (sc
.parallelize([random_string() for _ in range(50000)], 8).toDF(["name"])
.cache())
并根据 shuffle.partitions 的数量来衡量时间:
sqlContext.setConf("spark.sql.shuffle.partitions", "1")
%timeit -n 10 df.groupby('name').count().collect()
## 10 loops, best of 3: 504 ms per loop
sqlContext.setConf("spark.sql.shuffle.partitions", "1")
%timeit -n 10 df.groupby('name').count().collect()
## 10 loops, best of 3: 451 ms per loop
sqlContext.setConf("spark.sql.shuffle.partitions", "100")
%timeit -n 10 df.groupby('name').count().collect()
## 10 loops, best of 3: 624 ms per loop
sqlContext.setConf("spark.sql.shuffle.partitions", "200")
%timeit -n 10 df.groupby('name').count().collect()
## 10 loops, best of 3: 778 ms per loop
sqlContext.setConf("spark.sql.shuffle.partitions", "1000")
%timeit -n 10 df.groupby('name').count().collect()
## 10 loops, best of 3: 1.75 s per loop
虽然这些值与您声称的值不可比,并且此数据已在本地模式下收集,但您可以看到相对清晰的模式 . 这同样适用于RDD:
from operator import add
%timeit -n 10 df.rdd.map(lambda x: (x['name'], 1)).reduceByKey(add, 1).collect()
## 10 loops, best of 3: 414 ms per loop
%timeit -n 10 df.rdd.map(lambda x: (x['name'], 1)).reduceByKey(add, 10).collect()
## 10 loops, best of 3: 439 ms per loop
%timeit -n 10 df.rdd.map(lambda x: (x['name'], 1)).reduceByKey(add, 100).collect()
## 10 loops, best of 3: 1.3 s per loop
%timeit -n 10 df.rdd.map(lambda x: (x['name'], 1)).reduceByKey(add, 1000).collect()
## 10 loops, best of 3: 8.41 s per loop
在适当的分布式环境中,由于网络IO的成本,这将更高 .
仅供比较,让我们检查在没有Spark的情况下在本地执行此任务需要多长时间
from collections import Counter
data = df.rdd.flatMap(lambda x: x).collect()
%timeit -n 10 Counter(data)
## 10 loops, best of 3: 9.9 ms per loop
您还应该查看数据位置 . 根据您使用的存储和配置,即使使用这样的小输入,这也会给您的作业增加额外的延迟 .
spark比java快吗_为什么我的Spark DataFrame比RDD慢得多?相关推荐
- spark的数三角形算法_数据算法 Hadoop Spark大数据处理技巧 PDF 下载
相关截图: 资料简介: 本书介绍了很多基本设计模式.优化技术和数据挖掘及机器学习解决方案,以解决生物信息学.基因组学.统计和社交网络分析等领域的很多问题.这本书还概要介绍了MapReduce.Hado ...
- spark需要maven管理吗_使用Eclipse编写Spark应用程序(Scala+Maven)
点击这里观看厦门大学林子雨老师主讲<大数据技术原理与应用>授课视频 [版权声明]博客内容由厦门大学数据库实验室拥有版权,未经允许,请勿转载! [返回Spark教程首页] 对Scala代码进 ...
- java 快排_八大排序-快速排序(搞定面试之手写快排)
概要 快速排序由C. A. R. Hoare在1960年提出,是八大排序算法中最常用的经典排序算法之一.其广泛应用的主要原因是高效,核心算法思想是分而治之.快速排序经常会被作为面试题进行考察,通常的考 ...
- java 快排_秋招|字节跳动Java后台已上岸,发个面经回馈牛油
作者:beatLAL 链接:https://www.nowcoder.com/discuss/215891 来源:牛客网 本人从牛客大佬的面经中学到了很多,这次上岸回馈牛油,把自己面经分享给大家,希望 ...
- java 快排_百度在年前会在打击一轮快排!
百度近期借助线上搜索知识公开课对外通知,百度搜索即将在年前再来一波快排站大清扫,不论是不是烟雾弹站长们最近还是要低调,以免被误伤. 根据百度搜索线上公开课内容大纲了解到,这次课程包括了,新站外链,网站 ...
- spark sql合并小文件_如何比较Hive,Spark,Impala和Presto?
Spark,Hive,Impala和Presto是基于SQL的引擎,Impala由Cloudera开发和交付.在选择这些数据库来管理数据库时,许多Hadoop用户会感到困惑.Presto是一个开放源代 ...
- java 时间序列预测_基于spark的时间序列预测包Sparkts._的使用
最近研究了一下时间序列预测的使用,网上找了大部分的资源,都是使用python来实现的,使用python来实现虽然能满足大部分的需求,但是python有一点缺点按就是只能使用一台计算资源进行计算,如果数 ...
- java比go难学_为什么Go比Java快这么多?看完这个例子就懂
一,前言 本次小测试并不是试图说明Go是java的替代,Go lang和Java本就不是实现相同类型任务的语言 :Java是企业开发语言,而Go是系统编程语言.为什么Go比Java快这么多?看完这个例 ...
- java 快死了_如果Java快死了,那么它肯定看起来非常健康
java 快死了 Java快要死了的奇怪但流行的断言只能在没有证据的情况下提出,而不是因为它. 在酷孩子闲逛的论坛(Hacker News,Reddit等)中反复出现的偏见与Java语言背道而驰. 人 ...
最新文章
- CSDN插件限时内测,新用户抢永久免费去广告特权!
- python正则表达式需要模块_使用Python正则表达式模块,让操作更加简单
- 018_Session
- VTK:PolyData之ImplicitDataSetClipping
- math.js:灵活强大的JavaScript数学库
- 设计模式学习笔记(十七)——Command命令模式
- 创建hugo博客_如何创建您的第一个Hugo博客:实用指南
- 基于《河北省重大技术需求征集系统》的可用性和可修改性战术分析
- UI设计加载动效趋势|可以认真学习临摹的素材模板
- centos 安装mysql-proxy_详解在Centos 5.2下安装最新Mysql Proxy LUA教程
- 一天搞懂深度学习--深度学习简介
- 用计算机收传真,使用计算机发送和接收传真.doc
- Some Laws in IT
- 分布式定时任务框架选型,完美!
- DDD 领域事件设计(基于Guava EventBus二次封装)
- 微软office办公系列软件的具体用处及办公作用说明指南
- 举着一片片小小柔柔的叶子
- Gitlab 12.9.4 的搭建部署及遇到的问题。
- ixgbe 驱动安装
- vue range 双向滚动 取中间值