Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PySpark SQL数据帧以增量方式标识和存储连续的匹配值行_Python_Apache Spark_Pyspark_Apache Spark Sql - Fatal编程技术网

Python PySpark SQL数据帧以增量方式标识和存储连续的匹配值行

Python PySpark SQL数据帧以增量方式标识和存储连续的匹配值行,python,apache-spark,pyspark,apache-spark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,我想知道是否可以将pyspark数据框中布尔列的信息存储到另一列中,该列显示连续真值的“出现次数” 我有一个专栏 我要创建的列 真的 1. 真的 1. 真的 1. 真的 1. 假的 0 假的 0 真的 2. 真的 2. 假的 0 真的 3. 真的 3. 您可以添加一个助手列begin,如下所示,并使用窗口函数进行滚动求和: 示例数据帧: df.show() +---+-----+ | ts| col| +---+-----+ | 0| true| | 1| true| | 2| true

我想知道是否可以将pyspark数据框中布尔列的信息存储到另一列中,该列显示连续真值的“出现次数”

我有一个专栏 我要创建的列 真的 1. 真的 1. 真的 1. 真的 1. 假的 0 假的 0 真的 2. 真的 2. 假的 0 真的 3. 真的 3.
您可以添加一个助手列
begin
,如下所示,并使用窗口函数进行滚动求和:

示例数据帧:

df.show()
+---+-----+
| ts|  col|
+---+-----+
|  0| true|
|  1| true|
|  2| true|
|  3| true|
|  4|false|
|  5|false|
|  6| true|
|  7| true|
|  8|false|
|  9| true|
| 10| true|
+---+-----+
代码:


spark数据帧是无序的。没有“连续”的概念,除非你有一个列来排序。谢谢你的评论,我应该提到的是,值是按时间戳列排序的。
w = Window.orderBy('ts')
df2 = df.withColumn(
    'begin', 
    F.coalesce(
        (F.lag('col').over(w) != F.col('col')) & F.col('col'), 
        F.lit(True)    # take care of first row where lag is null
    ).cast('int')
).withColumn(
    'newcol', 
    F.when(
        F.col('col'), 
        F.sum('begin').over(w)
    ).otherwise(0)
)

df2.show()
+---+-----+-----+------+
| ts|  col|begin|newcol|
+---+-----+-----+------+
|  0| true|    1|     1|
|  1| true|    0|     1|
|  2| true|    0|     1|
|  3| true|    0|     1|
|  4|false|    0|     0|
|  5|false|    0|     0|
|  6| true|    1|     2|
|  7| true|    0|     2|
|  8|false|    0|     0|
|  9| true|    1|     3|
| 10| true|    0|     3|
+---+-----+-----+------+