繁体   English   中英

PySpark window function 改进

[英]PySpark window function improvement

我需要用以前的记录值替换,所以我使用 window function 实现了这个,但我想提高性能。 您能否告知是否有其他替代方法。

from pyspark.sql import SparkSession, Window, DataFrame
from pyspark.sql.types import *
from pyspark.sql import functions as F

source = [(1,2,3),(2,3,4),(1,3,4)]
target = [(1,3,1),(3,4,1)]
schema = ['key','col1','col2']
source_df = spark.createDataFrame(source, schema=schema)
target_df = spark.createDataFrame(source, schema=schema)

df = source_df.unionAll(target_df)

window = Window.partitionBy(F.col('key')).orderBy(F.col('col2').asc())


df = df.withColumn('col1_prev', F.lag(F.col('col1_start')).over(window)\
       .withColumn('col1', F.lit('col1_next'))

df.show()

1,3,1
1,2,1
1,3,3
2,3,4
3,4,1

您可以在指定的时间间隔内使用last的 function,例如 window 中的最后两行。 我将这里设置为maxsize作为示例:

import sys
window = Window.partitionBy('key')\
               .orderBy('col2')\
               .rowsBetween(-sys.maxsize, -1)

df = F.last(df['col1_prev'], ignorenulls=True).over(window)

我希望它能解决你的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM