首页 > 其他分享 >pyspark学习

pyspark学习

时间:2023-09-03 20:56:22浏览次数:37  
标签:pyspark rank 学习 user import avg id

from pyspark import *
from pyspark.sql import SparkSession
from pyspark.sql import functions as f
import json
import os

from pyspark.sql.types import StructType, IntegerType, StringType


# os.environ['HADOOP_CONF_DIR'] = '/export/server/hadoop-3.3.0/etc/hadoop'

if __name__ == '__main__':
    #pyspark编程入口,创建buIlder,创建SparkSession实例对象
    spark = SparkSession.builder. \
        appName("test"). \
        master("local[*]"). \
        getOrCreate()
    #可以使用rdd转化为dataframe格式(表格式)
    sc = spark.sparkContext

    #schema为表的格式,即表的属性设置,第一个参数为属性名称,第二个参数为属性的类型,第三个参数表示是否为空,TRUE默认可以为为空,使用add()函数添加属性
    schema = StructType().add("user_id", StringType(), nullable=True). \
        add("movie_id", IntegerType(), nullable=True). \
        add("rank", IntegerType(), nullable=True). \
        add("ts", StringType(), nullable=True)

    #也可以使用read的api创建dataframe,其中option为参数设置(按照什么分割,是否有标题,编码等等),load为路径(可以是本地的路径,也可以是hdfs)
    df = spark.read.format("csv"). \
        option("sep", "\t"). \
        option("header", False). \
        option("encoding", "utf-8"). \
        schema(schema=schema). \
        load("../data/input/sql/u.data")




    #TODO 求每个人的平均分降序平排列
    #api风格
    #withColumnRenamed对一列改名
    #withColumn对一列进行操作,例如设置精度等等
    df.groupBy("user_id"). \
        avg("rank"). \
        withColumnRenamed("avg(rank)", "avg_rank"). \
        withColumn("avg_rank", f.round("avg_rank", 2)). \
        orderBy("avg_rank", ascending=False). \
        show()

    # TODO 求每个人的平均分,最高分,最低分
    #当有多个聚合函数的时候使用agg()里面,可以使用function的api来对dataframe进行操作
    df.groupBy("user_id"). \
        agg(
        f.round(f.avg("rank"), 2).alias("avg_rank")
    ).show()

    user_id = df.where("rank>3"). \
        groupBy("user_id"). \
        count(). \
        withColumnRenamed("count", "cnt"). \
        orderBy("cnt", asending=False). \
        limit(1).first()["user_id"]
    print(user_id)

  

标签:pyspark,rank,学习,user,import,avg,id
From: https://www.cnblogs.com/copyjames/p/17675564.html

相关文章

  • 《Java编程思想第四版》学习笔记22
    注意下面这两句话:1、针对g()和main(),Throwable类必须在违例规格中出现,因为fillInStackTrace()会生成一个Throwable对象的句柄。由于Throwable是Exception的一个基础类,所以有可能获得一个能够“掷”出的对象(具有Throwable属性),但却并非一个Exception(违例)。因此,在main()......
  • STM32深入学习3:GPIO模块控制LED(寄存器版)
    GPIO模块数据手册详解:GPIO:通用输入/输出AFIO:备用输入/输出GPIOx_CRL和GPIOx_CRH:配置寄存器GPIOx_IDR和GPIOx_ODR:数据寄存器GPIOx_BSRR:置位/复位寄存器GPIOx_BRR:复位寄存器GPIOx_LCKR:锁定寄存器,锁定GPIO的数值GPIO模式:1.输入浮动:完全由外部决定2.输入上拉和输入下拉:存在......
  • 斜率优化DP 学习笔记
    斜率优化DP适用情况适用于求解最优解(最大、最小)问题。上凸壳与下凸壳求解步骤对于任意状态转义方程,设$A_i$,$B_i$,使状态转移方程转化为$f_i=\min(f_j+(A_i-B_j)^2)$当$i$使从$j$转移来时,丢掉$\min$$f_i=f_j+{A_i}^2+{B_j}^2-2\timesA......
  • 【学习笔记】树套树
    所谓树套树,其本质是通过用树维护一组树的根,从而维护强悍的数据1线段树套平衡树线段树套#include<bits/stdc++.h>usingnamespacestd;#defineMAXN50005intseg[MAXN<<2];intamin=1000000,amax=0;structNode{ intval,rnd,siz; intch[2]; }t[MAXN*80];intt......
  • 聊聊多任务学习
    最近翻译的一篇分享中,主要讲解了多任务学习的各个方面,很多的专业术语与概念都不清楚,因此简单的整理了下相关的知识,做个笔记。概述现在大多数机器学习任务都是单任务学习。对于复杂的问题,也可以分解为简单且相互独立的子问题来单独解决,然后再合并结果,得到最初复杂问题的结果。这......
  • 学习笔记-计算机病毒对抗技术-病毒概述
    本周我们学习下计算机病毒揭秘与对抗技术。主要分为6大模块计算机病毒概念定义计算机病毒(ComputerVirus)指编制者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机正常使用并且能够自我复制的一组计算机指令或程序代码。特点1、破坏性2、隐蔽性3、潜伏性4、传染性5、不可......
  • linux学习 Centos 7(一)
    linux学习Centos7(一)java学习:JaveSE、MySQL、前端(HTML、CSS、JS)、JavaWeb、SSM框架(基础)、Springboot、Vue、SpringCloud消息队列(Kafka、RabbitMQ、RockeetMQ),缓存(Redis),搜索引擎(ES),集群分布式!Linux(Centos7)的学习之路Linux一切皆文件,文件操作包括读、写、权限入门概述为什么......
  • Lnton羚通智能分析算法道路病害识别监测系统,使用CNN网络深度学习算法
    道路病害识别监测系统通过CNN网络深度学习算法,道路病害识别监测对巡检车上实时监控道路影像数据进行分析,输出道路病害裂缝巡检报告并落图展示。卷积神经网络(ConvolutionalNeuralNetwork,CNN)在图像处理和图像识别任务中取得了很大的成功。它通过卷积层、池化层和全连接层的组......
  • 网络流学习笔记
    开个坑,是个大工程,一篇可能放不下,所以后续存在形式未知。每周日写一个小时,大概会写很久,目前处于一个咕咕的状态。笔者是主要从Alex_wei的博客中学习网络流,因此本文有很多东西来自wls的博客,wlstql。1.一些有关概念网络是一张有向图\(G=(V,E)\),每条边\((u,v)\)具有流量......
  • Lnton羚通智能分析算法灭火器摆放识别检测算法, 使用python+yolo网络深度学习技术
    灭火器摆放识别检测算法通过python+yolo网络深度学习技术,自动对指定区域灭火器是否缺失进行识别,如果没有检测到指定区域有灭火器,立即抓拍存档进行告警。YOLO系列算法是一类典型的one-stage目标检测算法,其利用anchorbox将分类与目标定位的回归问题结合起来,从而做到了高效、灵活和......