在PySpark中计算每个序列号的持续时间

huwehgph  于 2022-11-01  发布在  Spark
关注(0)|答案(1)|浏览(161)

我想使用PySpark计算每个序列号的持续时间,以便可以过滤超过2天的序列号。

url="https://gist.githubusercontent.com/JishanAhmed2019/e464ca4da5c871428ca9ed9264467aa0/raw/da3921c1953fefbc66dddc3ce238dac53142dba8/failure.csv"
from pyspark import SparkFiles
spark.sparkContext.addFile(url)
df=spark.read.csv(SparkFiles.get("failure.csv"), header=True,sep='\t')

在Pandas中,我们用途:

df['Duartion'] = df.groupby('serial_number')['date'].apply(lambda x: x.dt.date - x.min().date()).dt.days

要添加持续时间列,如下所示:

然后我可以过滤创建dfNew

dfNew=df.loc[(df['diff'] >= 2)]

如何使用PySpark实现同样的功能?

vybvopom

vybvopom1#

您可以通过将window functiondatediff结合使用来实现此目的。

from pyspark.sql.window import Window
import pyspark.sql.functions as F

w = Window.partitionBy('serial_number')

df = df.withColumn('date', F.to_date('date', "M/d/yyyy"))
df.withColumn('Duaration', F.datediff('date', F.min('date').over(w))).show()

+----------+-------------+-------+-----------+-------------+---------+
|      date|serial_number|failure|smart_5_raw|smart_187_raw|Duaration|
+----------+-------------+-------+-----------+-------------+---------+
|2014-01-01|            B|      0|          0|           40|        0|
|2014-01-01|            A|      0|          0|           60|        0|
|2014-01-01|            C|      0|          0|           80|        0|
|2014-01-02|            B|      0|          0|          160|        1|
|2014-01-02|            A|      0|          0|          180|        1|
|2014-01-02|            C|      0|          0|          200|        1|
|2014-01-03|            B|      0|          0|          100|        2|
|2014-01-03|            C|      1|          0|          120|        2|
|2014-01-03|            A|      0|          0|          140|        2|
|2014-01-04|            A|      0|          0|          280|        3|
|2014-01-04|            D|      0|          0|          300|        0|
|2014-01-04|            B|      0|          0|          320|        3|
|2014-01-05|            B|      0|          0|          340|        4|
|2014-01-05|            D|      0|          0|          360|        1|
|2014-01-05|            A|      1|          0|          400|        4|
|2014-01-06|            B|      0|          0|          400|        5|
+----------+-------------+-------+-----------+-------------+---------+

相关问题