如何解决R中Arrow表字符串转时间戳返回NA的问题
解决Arrow表中字符串转时间戳返回NA的问题
问题原因
Arrow表通过Arrow计算引擎执行dplyr操作,不支持直接使用R基础包的strptime()函数——该函数无法被Arrow引擎解析执行,因此返回NA值。而原生data.frame使用R本地引擎,所以strptime()能正常工作。
解决方案
使用Arrow兼容的时间转换函数,推荐三种方式:
方式1:使用适配后的as.POSIXct()
Arrow对as.POSIXct()做了引擎适配,可直接在Arrow表的mutate()中使用:
library(arrow) library(dplyr) df <- data.frame( timestamp_origin = c("1/9/2023 5:52:34 PM", "1/9/2023 5:52:40 PM"), value = c(128.094, 128.094) ) df |> arrow_table() |> mutate( timestamp = as.POSIXct( timestamp_origin, format = "%m/%d/%Y %I:%M:%S %p", tz = "CET" ) ) |> collect()
方式2:使用Arrow原生parse_datetime()函数
这是Arrow专门的日期时间解析函数,性能更优,适合处理大型数据集:
df |> arrow_table() |> mutate( timestamp = parse_datetime( timestamp_origin, format = "%m/%d/%Y %I:%M:%S %p", tz = "CET" ) ) |> collect()
进阶优化:读取CSV时直接转换类型
如果是处理大型CSV文件,推荐在读取阶段就指定列类型,避免后续转换,大幅提升效率:
read_csv_arrow( "your_large_file.csv", col_types = schema( timestamp_origin = timestamp("%m/%d/%Y %I:%M:%S %p", tz = "CET"), value = float64() ) )
内容的提问来源于stack exchange,提问作者Robert Hawlik
相关产品推荐
相关产品推荐

