Это похоже на трюк с использованием функций Window :
import sys
from pyspark.sql.window import Window
import pyspark.sql.functions as func
def fill_nulls(df):
df_na = df.na.fill(-1)
lag = df_na.withColumn('id_lag', func.lag('id', default=-1)\
.over(Window.partitionBy('session')\
.orderBy('timestamp')))
switch = lag.withColumn('id_change',
((lag['id'] != lag['id_lag']) &
(lag['id'] != -1)).cast('integer'))
switch_sess = switch.withColumn(
'sub_session',
func.sum("id_change")
.over(
Window.partitionBy("session")
.orderBy("timestamp")
.rowsBetween(-sys.maxsize, 0))
)
fid = switch_sess.withColumn('nn_id',
func.first('id')\
.over(Window.partitionBy('session', 'sub_session')\
.orderBy('timestamp')))
fid_na = fid.replace(-1, 'null')
ff = fid_na.drop('id').drop('id_lag')\
.drop('id_change')\
.drop('sub_session').\
withColumnRenamed('nn_id', 'id')
return ff
Вот полный null_test.py .
$ r - это просто ссылка для выбранного элемента в RDT (React Developers Tools)
Таким образом, в зависимости от элемента, выбранного вами выше, вы будете быть в состоянии увидеть одно или другое.
Для просмотра фактической структуры вашего состояния вам обычно нужно позвонить: $r.state.store.getState()
Я рекомендую использовать плагин Redux DevTools Chrome, чтобы лучше видеть состояние путь.
Вот шаги, которые необходимо выполнить, чтобы все заработало: https://github.com/zalmoxisus/redux-devtools-extension#11-basic-store