使用 SparkR,如何将字符串列拆分为 'n' 多列?
Using SparkR, how to split a string column into 'n' multiple columns?
我正在使用 SparkR 1.6,我有一个数百万行的数据帧。 df 的列之一,名为“类别”,包含具有以下模式的字符串:
categories
1 cat1,cat2,cat3
2 cat1,cat2
3 cat3, cat4
4 cat5
我想拆分每个字符串并创建 « n » 新列,其中 « n » 是可能的类别数(此处 n = 5,但实际上它可能超过 50)。
每个新列都将包含该类别的 presence/absence 的布尔值,例如:
cat1 cat2 cat3 cat4 cat5
1 TRUE TRUE TRUE FALSE FALSE
2 TRUE TRUE FALSE FALSE FALSE
3 FALSE FALSE TRUE TRUE FALSE
4 FALSE FALSE FALSE FALSE TRUE
如何仅使用 sparkR api 执行此操作?
感谢您的宝贵时间。
问候。
让我们从导入和虚拟数据开始:
library(magrittr)
df <- createDataFrame(sqlContext, data.frame(
categories=c("cat1,cat2,cat3", "cat1,cat2", "cat3,cat4", "cat5")
))
单独的字符串:
separated <- selectExpr(df, "split(categories, ',') AS categories")
获取不同的类别:
categories <- select(separated, explode(separated$categories)) %>%
distinct() %>%
collect() %>%
extract2(1)
构建表达式列表:
exprs <- lapply(
categories, function(x)
alias(array_contains(separated$categories, x), x)
)
select 并检查结果
select(separated, exprs) %>% head()
## cat1 cat2 cat3 cat4 cat5
## 1 TRUE TRUE TRUE FALSE FALSE
## 2 TRUE TRUE FALSE FALSE FALSE
## 3 FALSE FALSE TRUE TRUE FALSE
## 4 FALSE FALSE FALSE FALSE TRUE
我正在使用 SparkR 1.6,我有一个数百万行的数据帧。 df 的列之一,名为“类别”,包含具有以下模式的字符串:
categories
1 cat1,cat2,cat3
2 cat1,cat2
3 cat3, cat4
4 cat5
我想拆分每个字符串并创建 « n » 新列,其中 « n » 是可能的类别数(此处 n = 5,但实际上它可能超过 50)。
每个新列都将包含该类别的 presence/absence 的布尔值,例如:
cat1 cat2 cat3 cat4 cat5
1 TRUE TRUE TRUE FALSE FALSE
2 TRUE TRUE FALSE FALSE FALSE
3 FALSE FALSE TRUE TRUE FALSE
4 FALSE FALSE FALSE FALSE TRUE
如何仅使用 sparkR api 执行此操作?
感谢您的宝贵时间。
问候。
让我们从导入和虚拟数据开始:
library(magrittr)
df <- createDataFrame(sqlContext, data.frame(
categories=c("cat1,cat2,cat3", "cat1,cat2", "cat3,cat4", "cat5")
))
单独的字符串:
separated <- selectExpr(df, "split(categories, ',') AS categories")
获取不同的类别:
categories <- select(separated, explode(separated$categories)) %>%
distinct() %>%
collect() %>%
extract2(1)
构建表达式列表:
exprs <- lapply(
categories, function(x)
alias(array_contains(separated$categories, x), x)
)
select 并检查结果
select(separated, exprs) %>% head()
## cat1 cat2 cat3 cat4 cat5
## 1 TRUE TRUE TRUE FALSE FALSE
## 2 TRUE TRUE FALSE FALSE FALSE
## 3 FALSE FALSE TRUE TRUE FALSE
## 4 FALSE FALSE FALSE FALSE TRUE