当我使用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)
您能帮我正确地创建该日期字段吗?