2016-08-11 4 views
0

Привет, все, перед которым я столкнулся с проблемой при преобразовании метки времени в POSIXlt, позже из этой временной метки o необходимо извлечь год, месяц, день, час , мин, сек

2015-12-01 00:04:39 is my timestamp 

и вот моя попытка

getwd() 
rm(list=ls()) 
library(ggplot2) 
library(plyr) 
library(reshape) 
library(scales) 
library(gridExtra) 
library(SparkR) 

Sys.setenv(SPARK_HOME="/usr/local/spark").libPaths(c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib"), .libPaths())) 

sc <- sparkR.init(master="local","RwordCount") 
args <- commandArgs(trailing = TRUE) 

sqlContext <- sparkRSQL.init(sc) 

df1 <- read.df(sqlContext, "hdfs://master:9000/test.csv", header='true', source = "com.databricks.spark.csv", inferSchema='true', stringsAsFactors = F) 


if("timestamp" %in% colnames(df1)){ 
    df1$pTime <- as.POSIXlt(df1$timestamp, format= "%Y-%m-%d %H:%M:%S") 
    }else { 
    df1$pTime <- as.POSIXlt(df1$Timestamp, format= "%Y-%m-%d %H:%M:%S") 
} 

но получить здесь ошибка не знаю, как преобразовать 'df1 $ временную метку' для класса «POSIXlt»

позже, мне нужно узнать год, месяц, DayOfMonth, Hors, мин, сек для этого у меня есть этот фрагмент

df1$Year <- df1$pTime$year-100 #Year 
df1$Month <- df1$pTime$mon+1 #Month 1-12 
df1$Day <- df1$pTime$mday #day of month 
df1$Hour <- df1$pTime$hour #0â??23: hours 
df1$Min <- df1$pTime$min 
df1$Sec <- df1$pTime$sec 
df1$WeekOfYear <- strftime(df1$pTime, format="%W") 

и я выполняющийся выше сценария, используя следующий синтаксис,

bin/spark-submit --packages com.databricks:spark-csv_2.11:1.3.0 /home/script/analysis.R 

**Error in as.POSIXlt.default(df1$timestamp, format = "%Y-%m-%d %H:%M:%S") : 
    do not know how to convert 'df1$timestamp' to class “POSIXlt” 
    Calls: as.POSIXlt -> as.POSIXlt.default 
    Execution halted** 

Как я могу избавиться от ошибки, любая помощь будет оценена. Благодаря

+0

У меня нет ошибок с кодом. Я попробовал с символьным символом таких дат, как тот, который вы цитируете. вы должны предоставить нам 'str (df1)'. – agenis

+0

Потому что я использую это в скрипте sparkR. –

ответ

1

Вы можете извлечь части значений даты и времени с помощью

x <- Sys.time() 
format(x, format="%Y") 

, например. См.

?strptime 

для всех вариантов.

Я не могу восстановить первую часть вашего вопроса. Какое сообщение об ошибке вы получаете?

1

Вы можете преобразовать временную метку с помощью as.POSIXct

x <- as.POSIXct("2015-12-01 00:04:39") 

, а затем с помощью lubridate пакет, вы можете извлечь всю информацию

library(lubridate) 

year(x) 
#[1] 2015 
month(x) 
#[1] 12 
day(x) 
#[1] 1 
hour(x) 
#[1] 0 
minute(x) 
#[1] 4 
second(x) 
#[1] 39 
1

во-первых, вы можете индексировать data.frame используя без использования ifelse case

df1[colnames(df1) %in% "timestamp"] 

Чтобы преобразовать всю колонку формата 2015-12-01 00:04:39

as.POSIXlt(strptime(as.character(df1[colnames(df1) %in% "timestamp"]), 
        format = "%Y-%m-%d %H:%M:%S"), 
      format = "%Y-%m-%d %H:%M:%S")