我正在尝试扩展我的一些 ML 管道,我喜欢 sparklyr 开放的 rstudio、spark 和 h2o 的组合(http://spark.rstudio.com/)
我想弄清楚的一件事是如何使用 sparklyr 从数据帧中的字符向量创建虚拟列。
我已经尝试过以下方法,但我认为它可能混合了一些 sparklyr 尚未实现的功能。
library(sparklyr)
library(dplyr)
sc <- spark_connect(master = "local")
flights_tbl <- copy_to(sc, nycflights13::flights, "flights")
flights_tbl %>% bind_cols(as_data_frame(setNames(lapply(unique(flights_tbl$carrier),
function(x){as.integer(flights_tbl$carrier == x)}),
paste0('var2_', levels(flights_tbl$carrier)))))
在这个例子中,我想为每个运营商创建指标变量。
老实说,我对 dplyr 并不是很熟悉,所以不确定我会怎么做。
是否有可能已经退出的 spark 函数,我可以通过 sparklyr 扩展调用,或者有没有办法只使用 dplyr 函数来做到这一点?
更新
我想我有办法在数据帧上的 pyspark 中执行此操作(以防对任何人有用)。
所以如果数据看起来像:
>>> df.show(20)
+------------+----------+------+-----------+
| word|word_count|corpus|corpus_date|
+------------+----------+------+-----------+
| profession| 1|hamlet| 1600|
| augury| 1|hamlet| 1600|
|undertakings| 1|hamlet| 1600|
| surmise| 1|hamlet| 1600|
| religion| 1|hamlet| 1600|
| advanced| 1|hamlet| 1600|
| Wormwood| 1|hamlet| 1600|
| parchment| 1|hamlet| 1600|
| villany| 1|hamlet| 1600|
| digs| 1|hamlet| 1600|
| authorities| 1|hamlet| 1600|
| Popp'd| 1|hamlet| 1600|
| retrograde| 1|hamlet| 1600|
| tax'd| 1|hamlet| 1600|
| tomb| 1|hamlet| 1600|
| moral| 1|hamlet| 1600|
| foreknowing| 1|hamlet| 1600|
| dreadfully| 1|hamlet| 1600|
| parted| 1|hamlet| 1600|
| willow| 1|hamlet| 1600|
+------------+----------+------+-----------+
然后以下似乎可以在 [word] 字段上制作假人:
categories = df.select("word").distinct().rdd.flatMap(lambda x: x).collect()
exprs = [F.when(F.col("word") == category, 1).otherwise(0).alias(category) for category in categories]
df_dummies = df.select("word", *exprs).limit(1000)