【问题标题】:How to define current time zone in Azure ML for strptime function, unknown timezone 'localtime'如何在 Azure ML 中为 strptime 函数定义当前时区,未知时区“本地时间”
【发布时间】:2015-10-29 00:43:41
【问题描述】:

我在 Azure 机器学习的 Execute R 模块中操作的所有这些日期在输出中都写为空白 - 也就是说,这些日期列存在,但这些列中没有值。

包含我正在读取到数据框中的日期信息的源变量有两种不同的日期格式。它们如下:

usage$Date1=c(‘8/6/2015’   ‘8/20/2015’  ‘7/9/2015’)
usage$Date2=c(‘4/16/2015 0:00’,  ‘7/1/2015 0:00’, ‘7/1/2015 0:00’) 

我检查了 AML 中的日志文件,但 AML 找不到本地时区。 日志文件特别警告: [模块输出] 1:在 strptime(x, format, tz = tz) 中: [ModuleOutput] 无法识别当前时区“C”: [ModuleOutput] 请设置环境变量'TZ' [ModuleOutput] [ModuleOutput] 2: 在 strptime(x, format, tz = tz) : unknown timezone 'localtime'

我在这里提到了关于为 strptime 设置默认时区的另一个答案

unknown timezone name in R strptime/as.POSIXct

我更改了代码以显式定义全局环境时间变量。

Sys.setenv(TZ='GMT')


####Data frame usage cleanup, format and labeling
usage<-as.data.frame(usage)
usage$Date1<-as.character(usage$Date1)
usage$Date1<-as.POSIXct(usage$Date1, "%m/%d/%Y",tz="GMT")
usage$Date1<-format(usage$Date1, "%m/%d/%Y")
usage$Date1<-as.Date(usage$Date1, "%m/%d/%Y")
usage<-as.data.frame(usage)

usage$Date2<- as.POSIXct(usage$Date2, "%m/%d/%Y",tz="GMT")
usage$Date2<- format(usage$Date2,"%m/%d/%Y")
usage$Date2<-as.Date(usage$Date2, "%m/%d/%Y")
usage<-as.data.frame(usage)

问题仍然存在 - 结果 AzureML 不会写出这些变量,而是将这些列写成空白。
(此代码在 R studio 中工作,我认为本地时间是从系统中获取的。)

看了两篇关于这个问题的博文,好像Azure ML不支持某些日期时间格式:

http://blogs.msdn.com/b/andreasderuiter/archive/2015/02/03/troubleshooting-error-1000-rpackage-library-exception-failed-to-convert-robject-to-dataset-when-running-r-scripts-in-azure-ml.aspx

http://www.mikelanzetta.com/2015/01/data-cleaning-with-azureml-and-r-dates/

所以我尝试在将其发送到输出流之前转换为 POSIXct,我已完成如下操作: 租户$Date1 = as.POSIXct(租户$Date1, "%m/%d/%Y",tz = "EST5EDT"); tenantusage$Date2 = as.POSIXct(tenantusage$Date2 , "%m/%d/%Y",tz = "EST5EDT");

但遇到同样的问题。这些变量中的信息拒绝写入输出。 Date1 和 Date2 列是空白的。

请指教!

谢谢

【问题讨论】:

  • 遇到同样的错误,找不到任何解决方法

标签: r datetime azure-machine-learning-studio


【解决方案1】:

嗨 SingingData 和 SochiX,

很遗憾听到这种挫败感!我发现 SingingData 代码示例的以下变体对我有用(在 CRAN 3.1.0 模块中测试):

usage <- data.frame(list(Date1 = c('8/6/2015',   '8/20/2015',  '7/9/2015'),
                         Date2 = c('4/16/2015 0:00',  '7/1/2015 0:00', '7/1/2015 0:00')))
usage$Date1 <- as.POSIXlt(usage$Date1, "%m/%d/%Y",tz="GMT")
usage$Date2 <- as.POSIXlt(usage$Date2, "%m/%d/%Y",tz="GMT")

usage$Date1 <- format(usage$Date1, "%m/%d/%Y")
usage$Date2 <- format(usage$Date2,"%m/%d/%Y")

usage$Date1 <- as.Date(usage$Date1, "%m/%d/%Y")
usage$Date2 <- as.Date(usage$Date2, "%m/%d/%Y")

maml.mapOutputPort("usage");

我使用了as.POSIXlt() 而不是as.POSIXct()。我希望这有助于解除您在 R 中的工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 2017-04-23
    • 2011-07-24
    • 2014-04-13
    相关资源
    最近更新 更多