使用Pyspark和ntil函数,我正在寻找一种在排名时处理空值的方法.下面的代码也会将空值排序为1.我不想这样,我希望他们的排名为空.并且仅对非空值进行排序.
我可以在排名之前过滤掉空值,但随后由于我的用例,我需要将空值加入回go .
有没有一种方法只对值进行排名,从排名中go 掉NULL,而仍然保留所有行?
import numpy as np
from pyspark.sql import SparkSession
#spark = SparkSession.builder.appName("PandasToSpark").getOrCreate()
data = pd.DataFrame({'ID':[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 16, 18, 18, 19, 20],
'group':['A']*10 + ['B']*10,
'feature':[0.5, 3.4, 0.3, 0.1, 1.2, np.nan, 2, np.nan, 1.1, 2.2, np.nan, 1.32, 2.5, np.nan, 0.87, 1.56, 2.1, np.nan, 0.34, 7.43]})
spark_df = spark.createDataFrame(data)
window = Window.partitionBy(['group']).orderBy('feature')
spark_df = spark_df.withColumn("feature_rank", F.ntile(5).over(window))
spark_df.display()