Вычесть все элементы в столбце в sparkR

У меня есть DataFrame 'res' в sparkR. 'res' содержит идентификатор и даты. Таким образом, первые записи выглядят так: «ID» = 1 2 3 ... и «дата» = «2012-6-5», «2013-5-5», «2015-10-11» ...

Я хочу создать новый набор данных, в котором все «даты» вычитаются из «2010-01-01». Как это может быть сделано? У меня точно такая же проблема, если я просто хочу, чтобы все элементы в DataFrame вычитались с целым числом.

В sparkR я пробовал это

newres <- withColumn(res, "subtract", res$date - as.Date("2010-01-01") )

Это выполняется, но когда я набираю head (newres), я получаю сообщение об ошибке: «returnstatus == 0 is not True».


person Ole Petersen    schedule 17.08.2015    source источник


Ответы (1)


В вашем предыдущем вопросе (Преобразовать строку в дату в sparkR) я прочитал этот тип преобразование не было проблемой для выполнения в R, а не в SparkR. В моих настройках я могу преобразовать все в целое число в R и выполнить вычитание в SparkR следующим образом:

df <- data.frame(user_id=c(1,1,2,2),
                time=c("2015-7-10","2015-8-04","2015-8-8","2015-7-10"))

df$time <- as.Date(df$time)
df$time <- as.numeric(df$time)

date <- as.numeric(as.Date("2010-01-01"))

res <- createDataFrame(sqlContext, df)

newRes <- withColumn(res, "subtract",res$time - date)

collect(newRes)

что дает мне

  user_id  time subtract
1       1 16626     2016
2       1 16651     2041
3       2 16655     2045
4       2 16626     2016

Я надеюсь, что это сработает, поскольку вы сказали, что у вас также были проблемы с целочисленным вычитанием... Единственная «проблема» с этим решением — преобразование времени в R: теперь вы ограничены кадрами данных, которые полностью помещаются в память вашей среды R. .

person Wannes Rosiers    schedule 18.08.2015
comment
Я просто сделал это таким же образом, используя R. В R не требуется много времени, чтобы вычесть все элементы в векторе 'u' с датой или целым числом, когда длина (u) = 70000. В моем случае достаточно быстро. - person Ole Petersen; 18.08.2015
comment
Все еще задаетесь вопросом, работает ли целочисленное вычитание в SparkR? - person Wannes Rosiers; 18.08.2015
comment
Оно делает. Я могу без проблем запустить ваш пример в sparkR. - person Ole Petersen; 18.08.2015