Я конвертирую простой R-код в SparkR для эффективного использования Spark.Как найти длину столбца в SparkR
У меня есть нижняя колонка CloseDate.
CloseDate
2011-01-08
2011-02-07
2012-04-07
2013-04-18
2011-02-07
2010-11-10
2010-12-09
2013-02-18
2010-12-09
2011-03-11
2011-04-10
2013-06-19
2011-04-10
2011-01-06
2011-02-06
2013-04-16
2011-02-06
2015-09-25
2015-09-25
2010-11-10
Я хочу посчитать количество раз, когда эта дата была увеличена | уменьшена. Для этого у меня есть код R ниже.
dateChange <- function(closeDate, dir){
close_dt <- as.Date(closeDate)
num_closedt_out = 0
num_closedt_in = 0
for(j in 1:length(close_dt))
{
curr <- close_dt[j]
if (j > 1)
prev <- close_dt[j-1]
else
prev <- curr
if (curr > prev){
num_closedt_out = num_closedt_out + 1
}
else if (curr < prev){
num_closedt_in = num_closedt_in + 1
}
}
if (dir=="inc")
ret <- num_closedt_out
else if (dir=="dec")
ret <- num_closedt_in
ret
}
Я попытался использовать SparkR df $ col здесь. Поскольку искра лениво выполняет код, я не получил значение длины во время этого выполнения и получал ошибку NaN.
Вот модифицированный код, который я пробовал.
DateDirChanges <- function(closeDate, dir){
close_dt <- to_date(closeDate)
num_closedt_out = 0
num_closedt_in = 0
col_len <- SparkR::count(close_dt)
for(j in 1:col_len)
{
curr <- close_dt[j]
if (j > 1)
prev <- close_dt[j-1]
else
prev <- curr
if (curr > prev){
num_closedt_out = num_closedt_out + 1
}
else if (curr < prev){
num_closedt_in = num_closedt_in + 1
}
}
if (dir=="inc")
ret <- num_closedt_out
else if (dir=="dec")
ret <- num_closedt_in
ret
}
Как я могу получить длину столбца во время выполнения этого кода? Или есть еще лучше?
Я думаю, что могу разделить данные, как Что ж. Но мы используем lateiff для получения желаемого результата. Но здесь мне нужно написать пользовательскую функцию. Например, он должен проверить, увеличивается или уменьшается значение из его LAG, и оно должно просто вернуть количество раз, когда значение увеличилось или уменьшилось. Таким образом, эта пользовательская функция должна читать данные для создания нового столбца. Есть ли возможность сделать это? – sag
До тех пор, пока у вас есть способ определить порядок (требуется) и разбиение на разделы (для производительности), это довольно просто. – zero323
Это точно похоже на предыдущий вопрос. Я просто упорствовал в tempTable и получил отставание. Там мы используем датифф, чтобы получить разницу. Здесь нам нужно написать что-то вроде getIncrementCount (df $ closeDate, df $ lagCloseDate). В этой функции мне нужно перебирать и поддерживать счет. Этот счет должен быть увеличен на единицу каждый раз, когда closeDate больше, чем lagCloseDate. Я действительно ссылался на некоторые функции по умолчанию, предоставляемые SparkR, но все они называют java для этого. Возможно ли это R? Извините, если вопрос слишком тупой. Я очень новичок в R и SparkR – sag