在Sparklyr下使用dplyr :: mutate将字符串解析为R date

时间:2019-07-06 03:28:55

标签: r dplyr sparklyr

当我使用Sparklyr和dplyr从字符串创建R日期变量时,返回值始终为NA。你能帮我吗?我没有适合您的示例,但请尽我所能演示该过程。

原始字段已从实木复合地板文件读入Spark:

a <- spark_read_parquet(sc, name = "a", "/blahblah")

有一个名为'period'的字段,其值像这样,它是一个字符串:

01JAN19
02JAN19
03JAN18
....

我使用以下命令创建一个名为“ dt_period”的新字段,以将字符串转换为R日期,以便我可以比较不同的日期:

a <- a%>%
mutate(dt_period= to_date(period,"%d%b%y"), year_period = year(dt_period))

当我提取10条记录进行仔细检查时,它给了我错误:

a %>%
select(period,dt_period,year_period) %>% compute() %>% sample_n(10) %>% collect

这两个新创建的字段的值显示为“ NA”。

我也从lubridate包中尝试了dmy函数,但失败了:

a %>%
mutate(dt_period = dmy(period), year_period = year(dt_cur_period))

日志:

  

错误:org.apache.spark.sql.AnalysisException:未定义的函数:   “ DMY”。此功能既不是注册的临时功能,也不是   在数据库“默认”中注册的永久功能。第4行   3361在   org.apache.spark.sql.catalyst.analysis.Analyzer $ LookupFunctions $$ anonfun $ apply $ 15 $$ anonfun $ applyOrElse $ 50.apply(Analyzer.scala:1396)   在   org.apache.spark.sql.catalyst.analysis.Analyzer $ LookupFunctions $$ anonfun $ apply $ 15 $$ anonfun $ applyOrElse $ 50.apply(Analyzer.scala:1396)   在   org.apache.spark.sql.catalyst.analysis.package $ .withPosition(package.scala:53)   在

我还尝试了spark_apply():

a <- a%>%
spark_apply(function(dff) dplyr::mutate(dff, dt_period = lubridate::ymd(period), year_period = year(dt_period)))

日志:

  

错误:org.apache.spark.SparkException:作业因阶段中止   失败:阶段12.0中的任务0失败4次,最近一次失败:   在阶段12.0中丢失任务0.3(TID 295,10.139.64.7,执行者3):   java.lang.Exception:sparklyr worker rscript失败,状态为255,   检查工作日志以了解详细信息。在   sparklyr.Rscript.init(rscript.scala:106)在   sparklyr.WorkerApply $$ anon $ 2.run(workerapply.scala:116)

您能帮我正确地创建该日期字段吗?

0 个答案:

没有答案