Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.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中创建计数器_Python_R_Apache Spark_Pyspark - Fatal编程技术网

Python 在pyspark中创建计数器

Python 在pyspark中创建计数器,python,r,apache-spark,pyspark,Python,R,Apache Spark,Pyspark,如何在Pyspark中实现以下R代码 l = data.frame(d=c(1,2,4,7,8,15,17,19,20,25,26,29)) l$d2[1]= 0 l$d3[1]=c=1 for(i in 2:nrow(l)) { l$d2[i]=l$d[i]-l$d[i-1] c= ifelse(l$d2[i]<=3,c,c+1) l$d3[i]=c } l l=数据帧(d=c(1,2,4,7,8,15,17,19,20,25,26,29)) l$d2[1]=0 l$d3[1

如何在Pyspark中实现以下R代码

l = data.frame(d=c(1,2,4,7,8,15,17,19,20,25,26,29))
l$d2[1]= 0
l$d3[1]=c=1
for(i in 2:nrow(l))
{ l$d2[i]=l$d[i]-l$d[i-1]
  c= ifelse(l$d2[i]<=3,c,c+1)
  l$d3[i]=c
 }
l
l=数据帧(d=c(1,2,4,7,8,15,17,19,20,25,26,29))
l$d2[1]=0
l$d3[1]=c=1
适用于(第2部分中的i:nrow(l))
{l$d2[i]=l$d[i]-l$d[i-1]

c=ifelse(l$d2[i]让我们假设以下是输入数据

输入:

df = spark.createDataFrame([[1,'A',1],[2,'A',2],[3,'A',2],[4,'A',3],[5,'A',2],\
                            [6,'A',5],[7,'B',1],[8,'B',2],[9,'B',5],[10,'B',1]],\
                            ['sl_no','partition','value'])
df.show(10)

  • sl_no-序列号[基本上是定义数据帧顺序的任何列]
  • 分区-如果计数器需要基于现有列进行分区,则分区列
  • -计数器递增所依据的值
输出:

以下代码将为您提供所需的输出

from pyspark.sql import Window
from pyspark.sql.functions import col, when, sum, lit

threshold= 3

df = df.withColumn("greater",when(col("value")>=lit(threshold),1).otherwise(0))\
       .withColumn("counter",sum("greater").over(Window.partitionBy().orderBy("sl_no")))\
       .withColumn("partitioned_counter",sum("greater").over(Window.partitionBy(["partition"]).orderBy("sl_no")))\
       .orderBy("sl_no")

df.show(10)

  • sl_no-序列号[基本上是定义数据帧顺序的任何列]
  • 分区-如果计数器需要基于现有列进行分区,则分区列
  • -计数器递增所依据的值
  • 更大-检查该值是否大于阈值[在本例中为3]
  • 计数器-当值超过阈值时递增的计数器
  • 分区的\u计数器-由分区列分区的计数器
如果只需要根据列的顺序和阈值创建一个总体计数器,则可以使用上面用于创建计数器列的代码


如果用例是为一个分区列/一组分区列单独实现计数器,那么您可以使用用于创建分区_计数器

计数器的代码。创建计数器很容易,您可以使用,但要获得重写代码的帮助,您应该首先显示您的实验谢谢您的帮助。我想使用它通过一列进行运算,如果值大于或等于3,则增加一个计数器。例如:假设我列中的元素是1,2,2,2,1,5,2,1,标志应该是:1,1,1,2,2,2,3,3-我有类似的问题,你最后是如何解决的?谢谢!@zhifff:我已经添加了解决方案