我正在尝试扩展我的一些 ML 管道,我喜欢 Sparklyr 打开的 rstudio、spark 和 h2o 的组合(http://spark.rstudio.com/ 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 函数来执行此操作?
Update
我想我有办法在 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)
取自 (带有虚拟变量的 pyspark 矩阵 https://stackoverflow.com/questions/35879372/pyspark-matrix-with-dummy-variables)