我用的是 implyr
用r包从hdfs/impala收集数据。在收集r中的数据之前,我想将当前在impala中格式化为时间戳的字段格式化为yyyymm。这是我的密码:
library(implyr); library(dplyr)
data %>%
select(date_field) %>%
mutate(yyyymm = as.Date(date_field, format = '%Y%m'))
注意:我需要这个完成之前,从 Impala 收集。
使用 show_query()
功能,我收到以下信息:
SELECT AS.DATE(date_field, '%Y%m' as "format") as yyyymm
FROM data
Warning message:
Named arguments ignored for SQL AS.DATE
自 implyr
正在作为 dplyr
对于 Impala ,我的问题是-有没有人知道是否有代码,将格式的日期相应地转换成一个可识别的 Impala 查询?在我看来,转换并不成功(关于: AS.DATE(date_field, '%Y%m' as "format") as yyyymm
). 我真的希望这个问题能通过 dplyr
语法?
我看过作者的文档https://github.com/ianmcook/implyr 通过堆栈上的问题,但还没弄明白。
提前谢谢。
编辑:
我能做到这一点: library(implyr); library(dplyr) data %>% select(date_field) %>% mutate(yyyy = year(date_field), mm = month(date_field))
产生:
Date_Field yyyy mm
2015-04-13 19:33:26.000 2015 4
但是,如果我加上 %>% mutate(yyyymm = paste0(yyyy,mm))
,错误在impala查询中 errorMessage:AnalysisException: No matching function with signature: concat(INT, INT)
. 所以我要做的是转换 yyyy
以及 mm
将对象连接到字符串中,以便 Impala 识别它们。在 Impala ,它看起来像这样: select date_field , concat(cast(year(date_field) as string), cast(month(date_field) as string)) as yyyymm from data
给了我想要的东西:
Date_Field yyyymm
2015-04-13 19:33:26 20154
除了月份格式之外,它应该可以用 lpad
在 Impala ,但我不关心我的目的。所以我需要弄清楚的是如何适当地转换 yyyy
以及 mm
我的领域 dplyr
在执行 paste0
功能。
2条答案
按热度按时间w41d8nur1#
在as.date()函数中,应该传递给参数的格式是数据所在的格式,而不是要转换的格式。
使用lubridate软件包,我重现了您的问题,这对我很有效:
你只需要把这个传给你的变异呼叫。
3pvhb19x2#
我想出来了。自从我上次编辑我的问题以来,修复只需要添加以下内容:
所以完整的解决方案是:
问题是我需要分步执行,以便impala将其识别为可执行查询。