这两个数字似乎都相对较高,并且不清楚如何创建 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慢得多?相关推荐

  1. spark的数三角形算法_数据算法 Hadoop Spark大数据处理技巧 PDF 下载

    相关截图: 资料简介: 本书介绍了很多基本设计模式.优化技术和数据挖掘及机器学习解决方案,以解决生物信息学.基因组学.统计和社交网络分析等领域的很多问题.这本书还概要介绍了MapReduce.Hado ...

  2. spark需要maven管理吗_使用Eclipse编写Spark应用程序(Scala+Maven)

    点击这里观看厦门大学林子雨老师主讲<大数据技术原理与应用>授课视频 [版权声明]博客内容由厦门大学数据库实验室拥有版权,未经允许,请勿转载! [返回Spark教程首页] 对Scala代码进 ...

  3. java 快排_八大排序-快速排序(搞定面试之手写快排)

    概要 快速排序由C. A. R. Hoare在1960年提出,是八大排序算法中最常用的经典排序算法之一.其广泛应用的主要原因是高效,核心算法思想是分而治之.快速排序经常会被作为面试题进行考察,通常的考 ...

  4. java 快排_秋招|字节跳动Java后台已上岸,发个面经回馈牛油

    作者:beatLAL 链接:https://www.nowcoder.com/discuss/215891 来源:牛客网 本人从牛客大佬的面经中学到了很多,这次上岸回馈牛油,把自己面经分享给大家,希望 ...

  5. java 快排_百度在年前会在打击一轮快排!

    百度近期借助线上搜索知识公开课对外通知,百度搜索即将在年前再来一波快排站大清扫,不论是不是烟雾弹站长们最近还是要低调,以免被误伤. 根据百度搜索线上公开课内容大纲了解到,这次课程包括了,新站外链,网站 ...

  6. spark sql合并小文件_如何比较Hive,Spark,Impala和Presto?

    Spark,Hive,Impala和Presto是基于SQL的引擎,Impala由Cloudera开发和交付.在选择这些数据库来管理数据库时,许多Hadoop用户会感到困惑.Presto是一个开放源代 ...

  7. java 时间序列预测_基于spark的时间序列预测包Sparkts._的使用

    最近研究了一下时间序列预测的使用,网上找了大部分的资源,都是使用python来实现的,使用python来实现虽然能满足大部分的需求,但是python有一点缺点按就是只能使用一台计算资源进行计算,如果数 ...

  8. java比go难学_为什么Go比Java快这么多?看完这个例子就懂

    一,前言 本次小测试并不是试图说明Go是java的替代,Go lang和Java本就不是实现相同类型任务的语言 :Java是企业开发语言,而Go是系统编程语言.为什么Go比Java快这么多?看完这个例 ...

  9. java 快死了_如果Java快死了,那么它肯定看起来非常健康

    java 快死了 Java快要死了的奇怪但流行的断言只能在没有证据的情况下提出,而不是因为它. 在酷孩子闲逛的论坛(Hacker News,Reddit等)中反复出现的偏见与Java语言背道而驰. 人 ...

最新文章

  1. CSDN插件限时内测,新用户抢永久免费去广告特权!
  2. python正则表达式需要模块_使用Python正则表达式模块,让操作更加简单
  3. 018_Session
  4. VTK:PolyData之ImplicitDataSetClipping
  5. math.js:灵活强大的JavaScript数学库
  6. 设计模式学习笔记(十七)——Command命令模式
  7. 创建hugo博客_如何创建您的第一个Hugo博客:实用指南
  8. 基于《河北省重大技术需求征集系统》的可用性和可修改性战术分析
  9. UI设计加载动效趋势|可以认真学习临摹的素材模板
  10. centos 安装mysql-proxy_详解在Centos 5.2下安装最新Mysql Proxy LUA教程
  11. 一天搞懂深度学习--深度学习简介
  12. 用计算机收传真,使用计算机发送和接收传真.doc
  13. Some Laws in IT
  14. 分布式定时任务框架选型,完美!
  15. DDD 领域事件设计(基于Guava EventBus二次封装)
  16. 微软office办公系列软件的具体用处及办公作用说明指南
  17. 举着一片片小小柔柔的叶子
  18. Gitlab 12.9.4 的搭建部署及遇到的问题。
  19. ixgbe 驱动安装
  20. vue range 双向滚动 取中间值

热门文章

  1. 前OnePlus视觉设计师蔡孝永:视觉设计师都在想些什么?
  2. 已完结 | PMCAFF深度报告:《 典典养车如何在一年内做到600万用户、三轮融资、覆盖40城市》
  3. 有逼格的产品经理都用什么样的杯子?
  4. 【干货】用痛点切入,用痒点黏住
  5. 用数据挖掘来支持音乐创作
  6. BZOJ 5064: B-number
  7. mysql的库和表相关操作
  8. Chapter3_操作符_方法调用中的别名问题
  9. urlencode使用场景
  10. SqlService 数据操作