spark vs hadoop mapreduce的优势 及常用的 sparksql groupby语法

spark Vs hadoop mapreduce

我们知道 spark和mapreduce都是计算机计算引擎,负责执行具体任务代码的执行,但是两者都不负责数据的存储,数据的存储一般是有hadoop hdfs负责的,那么这两个计算引擎谁的计算性能更好呢?
我们现在知道是spark计算引擎比mapreduce要快得多,那么spark拥有这种快速优势的主要原因是什么呢?答案其实很简单,就和我们日常优化应用程序的思路一样,spark也是通过减少磁盘IO,也就是把中间计算结果存储到节点的内存中来达到快速计算的目的,具体如下图所示:
在这里插入图片描述

spark sql 的group by常用的语法

为了记住通用的group by的语法,个人感觉使用如下通用的sql语句即可:

    df2 = spark.sql("select * from basketball").groupBy("team", "name").agg(
        {"year": "count", "salary": "sum"}).withColumnRenamed("count(year)", "yearTotal").withColumnRenamed(
        "sum(salary)", "salaryTotal")

详细代码如下:

from pyspark import SparkConf
from pyspark.sql import SparkSession
import traceback
from pyspark.sql.types import IntegerType

appname = "test"  # 任务名称
master = "local"  # 单机模式设置
'''
local: 所有计算都运行在一个线程当中,没有任何并行计算,通常我们在本机执行一些测试代码,或者练手,就用这种模式。
local[K]: 指定使用几个线程来运行计算,比如local[4]就是运行4个worker线程。通常我们的cpu有几个core,就指定几个线程,最大化利用cpu的计算能力
local[*]: 这种模式直接帮你按照cpu最多cores来设置线程数了。
'''
# spark_driver_host = "10.0.0.248"

try:
    # conf = SparkConf().setAppName(appname).setMaster(master).set("spark.driver.host", spark_driver_host) # 集群
    conf = SparkConf().setAppName(appname).setMaster(master)  # 本地
    spark = SparkSession.builder.config(conf=conf).getOrCreate()
    sc = spark.sparkContext
    player_source = [("laker","kebo","2019", 1000*10000), ("laker","kebo","2020", 2000*10000),
                     ("Cleveland","james","2019", 1500*10000), ("Cleveland","james","2020", 1800*10000)
                     , ("Cleveland","james","2021", 2500*10000)]
    rdd = sc.parallelize(player_source)
    df = spark.createDataFrame(rdd, "team: string, name: string, year: string, salary: int")
    df.createOrReplaceTempView("basketball")
    df2 = spark.sql("select * from basketball").groupBy("team", "name").agg(
        {"year": "count", "salary": "sum"}).withColumnRenamed("count(year)", "yearTotal").withColumnRenamed(
        "sum(salary)", "salaryTotal")
    df2.show()

    spark.stop()
    print('计算成功!')
except:
    traceback.print_exc()  # 返回出错信息
    print('连接出错!')

计算结果为:
在这里插入图片描述
这样我们就可以得到最适用的group by语法的用法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值