大家好,我在将时间戳转换为POSIXlt时面临问题,稍后从这个时间戳中需要提取年,月,日,小时,分钟,秒
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$timestamp'转换为类" POSIXlt "
之后,我需要找出年,月,日,小时,分钟,秒,为此我有这个片段
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**
我怎样才能摆脱错误,任何帮助将不胜感激。由于
您可以使用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
可以通过
提取部分datetime值x <- Sys.time()
format(x, format="%Y")
例如。看到
?strptime
为所有选项。
你问题的第一部分我想不起来了。得到的错误信息是什么?首先,您可以使用索引您的data.frame而不使用ifelse
大小写
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")
我在dataframe中有'trans_dtime'列类型string。我已经转换'trans_dtime'列到时间戳类型使用SparkR
printSchema(df)
root
|-- col1: string (nullable = true)
|-- trans_dtime: string (nullable = true)
df$trans_dtime <- from_utc_timestamp(date_format(df$trans_dtime, "YYYY-MM-dd HH:mm:ss"), "GMT")
printSchema(df)
root
|-- col1: string (nullable = true)
|-- trans_dtime: timestamp (nullable = true)
希望对你有帮助。:)