Я хочу иметь функцию udf, которая проходит через столбец «Значения» и проверяет, составляет ли следующее значение 50% или более от текущего значения строки. Если он находится в пределах 50% процентов, я хочу включить значение «да», если нет, то я не хочу включать это значение. Если значение падает слишком быстро между последним значением и следующим значением, его не следует включать, но если оно постепенно падает, а не более чем на 50% по сравнению с последним включенным значением, тогда все в порядке. Вот почему .1 для идентификатора 5 не был включен, но был включен .1 для идентификатора 9, потому что он следовал за значением, которое постепенно снижалось с .4 не более чем на 50%. Я думал о наличии переменной в udf для отслеживания последнего допустимого значения, но я не уверен, как это сделать.
rows = sc.parallelize([[1, .9, 'yes'], [2, .7, 'yes'], [3, .4, 'yes'], [4, .15, 'no'], [5, .1, 'no'], [7, .3, 'yes'], [8, .2, 'yes'], [9, .1, 'yes']])
rows_df = rows.toDF(["ID", 'Values', 'Include'])
#preview data
rows_df.show()
#show data schema
rows_df.printSchema()
+---+------+-------+
| ID|Values|Include|
+---+------+-------+
| 1| 0.9| yes|
| 2| 0.7| yes|
| 3| 0.4| yes|
| 4| 0.15| no|
| 5| 0.1| no|
| 7| 0.3| yes|
| 8| 0.2| yes|
| 9| 0.1| yes|
+---+------+-------+