我正在测试window函数中f.count(f.col().isnotnull())的用法。请看下面的代码脚本
from pyspark.sql import functions as F
from pyspark.sql import SparkSession
from pyspark.sql.window import Window
spark = SparkSession.builder.appName('SparkByExamples.com').getOrCreate()
list=([1,5,4],
[1,5,None],
[1,5,1],
[1,5,4],
[2,5,1],
[2,5,2],
[2,5,None],
[2,5,None],
[2,5,4])
df=spark.createDataFrame(list,['I_id','p_id','xyz'])
w= Window().partitionBy("I_id","p_id").orderBy(F.col("xyz").asc_nulls_first())
df.withColumn("xyz1",F.count(F.col("xyz").isNotNull()).over(w)).show()
结果如下。在前两排,我的理解是 F.count(F.col("xyz")
应该从中计算非零项 xyz = -infinity
至 xyz = null
,以下内容如何 isNotNull()
处理这个。为什么会这样 2
前两排 xyz1
列。
1条答案
按热度按时间jv2fixgn1#
如果计算布尔值,因为它们不是真的就是假的,那么将计算指定窗口中的所有行,而不管
xyz
是否为空。你能做的就是
sum
这个isNotNull
布尔值而不是计算它们。另一种方法是使用
when
: