如何将R数据框中AsIs类型列转为list以适配SparkR
解决方法
你可以用两种方式创建符合要求的数据框,确保numbers列为原生list类型,group列为integer类型,同时兼容SparkR:
方法一:Base R原生实现
不需要用I()包装list,直接构建数据框后添加list列:
# 创建group列(integer类型) group <- 1:2 # 创建包含向量的list numbers <- list(1:5, 8:11) # 先初始化只含group列的数据框 df <- data.frame(group, stringsAsFactors = FALSE) # 为数据框添加numbers列(自动识别为list类型) df$numbers <- numbers # 验证类型 class(df$group) # 返回 "integer" class(df$numbers) # 返回 "list"
方法二:用tibble包(更简洁)
tibble对list列的支持更友好,无需额外操作就能直接创建:
library(tibble) df <- tibble( group = 1:2, numbers = list(1:5, 8:11) ) # 验证类型 class(df$group) # 返回 "integer" class(df$numbers) # 返回 "list"
为什么原来的方法有问题?
你之前用I()包装list,会把它转换成AsIs类,这种类型是R为了保留特殊对象结构而做的包装,SparkR无法识别这种非原生的list类型。上面两种方法都能生成原生list列,完美兼容SparkR的要求。
内容的提问来源于stack exchange,提问作者iYOA
相关产品推荐
相关产品推荐

