@@ -1460,7 +1460,7 @@ def _fillna(self, value=None, method=None, axis=None, inplace=False, limit=None,
14601460 else :
14611461 end = Window .unboundedFollowing
14621462
1463- window = Window .partitionBy (* part_cols ).orderBy (self . _internal . index_scols ) \
1463+ window = Window .partitionBy (* part_cols ).orderBy (NATURAL_ORDER_COLUMN_NAME ) \
14641464 .rowsBetween (begin , end )
14651465 scol = F .when (scol .isNull (), func (scol , True ).over (window )).otherwise (scol )
14661466 kseries = self ._with_new_scol (scol ).rename (column_name )
@@ -2850,20 +2850,17 @@ def _rank(self, method='average', ascending=True, part_cols=()):
28502850 raise ValueError ('rank do not support index now' )
28512851
28522852 if ascending :
2853- asc_func = spark . functions . asc
2853+ asc_func = lambda scol : scol . asc ()
28542854 else :
2855- asc_func = spark .functions .desc
2856-
2857- index_column = self ._internal .index_columns [0 ]
2858- column_name = self ._internal .data_columns [0 ]
2855+ asc_func = lambda scol : scol .desc ()
28592856
28602857 if method == 'first' :
28612858 window = Window .orderBy (
2862- asc_func (column_name ), asc_func (index_column )
2859+ asc_func (self . _internal . scol ), asc_func (F . col ( NATURAL_ORDER_COLUMN_NAME ) )
28632860 ).partitionBy (* part_cols ).rowsBetween (Window .unboundedPreceding , Window .currentRow )
28642861 scol = F .row_number ().over (window )
28652862 elif method == 'dense' :
2866- window = Window .orderBy (asc_func (column_name )).partitionBy (* part_cols ) \
2863+ window = Window .orderBy (asc_func (self . _internal . scol )).partitionBy (* part_cols ) \
28672864 .rowsBetween (Window .unboundedPreceding , Window .currentRow )
28682865 scol = F .dense_rank ().over (window )
28692866 else :
@@ -2874,10 +2871,10 @@ def _rank(self, method='average', ascending=True, part_cols=()):
28742871 elif method == 'max' :
28752872 stat_func = F .max
28762873 window1 = Window .orderBy (
2877- asc_func (column_name )
2874+ asc_func (self . _internal . scol )
28782875 ).partitionBy (* part_cols ).rowsBetween (Window .unboundedPreceding , Window .currentRow )
28792876 window2 = Window .partitionBy (
2880- * [ column_name ] + list (part_cols )
2877+ [ self . _internal . scol ] + list (part_cols )
28812878 ).rowsBetween (Window .unboundedPreceding , Window .unboundedFollowing )
28822879 scol = stat_func (F .row_number ().over (window1 )).over (window2 )
28832880 kser = self ._with_new_scol (scol ).rename (self .name )
@@ -2959,7 +2956,7 @@ def diff(self, periods=1):
29592956 def _diff (self , periods , part_cols = ()):
29602957 if not isinstance (periods , int ):
29612958 raise ValueError ('periods should be an int; however, got [%s]' % type (periods ))
2962- window = Window .partitionBy (* part_cols ).orderBy (self . _internal . index_scols ) \
2959+ window = Window .partitionBy (* part_cols ).orderBy (NATURAL_ORDER_COLUMN_NAME ) \
29632960 .rowsBetween (- periods , - periods )
29642961 scol = self ._scol - F .lag (self ._scol , periods ).over (window )
29652962 return self ._with_new_scol (scol ).rename (self .name )
0 commit comments