搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > alitrack > 开窗函数之累积最大、最小,PySpark,Pandas和SQL版实现

开窗函数之累积最大、最小,PySpark,Pandas和SQL版实现

alitrack 2020-07-01

四种累积函数

  • cummax,累积最大

  • cummin,累积最小

  • ,累积和

  • ,累积乘

已经介绍了2个,今天一次性把另外两个介绍了。


测试环境

  • Jupyter Notebook

  • iPython-sql


  • Pandas

  • (可选)

数据准备

import pandas as pdimport numpy as npnp.random.seed(234)df0=pd.DataFrame({ 'x':np.repeat(range(3),4) , 'y':np.random.randn(12) })df0

Pandas 版本实现

df=df0.copy()df['cummax']=df.groupby("x")['y'].apply(lambda x:x.cummax())df['cummin']=df.groupby("x")['y'].apply(lambda x:x.cummin())df

开窗函数之累积最大、最小,PySpark,Pandas和SQL版实现

Koalas版本实现

import databricks.koalas as ksks.set_option('compute.ops_on_diff_frames',True)kdf = ks.DataFrame(df0)kdf['cummax']=kdf.groupby("x")['y'].apply(lambda x:x.cummax())kdf['cummin']=kdf.groupby("x")['y'].apply(lambda x:x.cummin())kdf.sort_values(by='x')

Spark实现

sdf=kdf.to_spark()spark=sdf.sql_ctx.sparkSession

or

from pyspark import SparkConfconf=SparkConf()# Enable Arrow-based columnar data transfersconf.set("spark.sql.execution.arrow.enabled", "true")
from pyspark.sql import SparkSessionspark=SparkSession.Builder()\.config(conf=conf).master("local[*]").getOrCreate()sdf=spark.createDataFrame(df0)


Spark SQL

sql="""select x,y, max(y) over( partition by x  order by x ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as cummax ,min(y) over( partition by x  order by x ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as cumminfrom sdf"""sdf.registerTempTable("sdf")df2=spark.sql(sql)df2.show()



Spark DataFrame

sdf2=spark.createDataFrame(df0)
from pyspark.sql import functions as F, Windowwindow = Window.partitionBy("x")\.rowsBetween(Window.unboundedPreceding, Window.currentRow)\.orderBy('x')

sdf3 = sdf2.withColumn("cummax", F.max("y").over(window))\.withColumn("cummin", F.min("y").over(window))sdf3.show()

如果有什么建议和意见,也欢迎留言,或者加我个人微信,



谢谢点亮[看]


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《开窗函数之累积最大、最小,PySpark,Pandas和SQL版实现》的版权归原作者「alitrack」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注alitrack微信公众号

alitrack微信公众号:gh_4f73785d7b2d

alitrack

手机扫描上方二维码即可关注alitrack微信公众号

alitrack最新文章

精品公众号随机推荐