在Spaklyr中创建虚拟变量? [英] Creating dummy variables in sparklyr?
本文介绍了在Spaklyr中创建虚拟变量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试扩展我的一些ML管道,我喜欢Spaklyr打开的RStudio、Spark和H2O的组合(http://spark.rstudio.com/)
我想弄明白的一件事是如何使用Spaklyr从数据帧中的字符向量创建伪COL。
我已经尝试了下面的方法,但我认为它可能混合了一些Spaklyr尚未实现的功能。
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函数,我可以通过Spaklyr扩展调用它,或者有没有办法只使用dplyr函数来实现?
更新
我想我有一种方法可以在数据帧上使用pysppark来完成这项工作(以防对任何人有用)。
因此,如果数据如下:
>>> 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 matrix with dummy variables)
推荐答案
这些可能是自最初的帖子以来的新内容。ml_
函数有ml_create_dummy_variables,这很好地完成了工作
iris_tbl <- copy_to(sc, iris)
iris_dum <- ml_create_dummy_variables(iris_tbl, "Species")
iris_dum %>% select(contains("Species")) %>% head
>
Source: query [6 x 4]
Database: spark connection master=local[4] app=lol local=TRUE
Species Species_setosa Species_versicolor Species_virginica
<chr> <dbl> <dbl> <dbl>
1 setosa 1 0 0
2 setosa 1 0 0
3 setosa 1 0 0
4 setosa 1 0 0
5 setosa 1 0 0
6 setosa 1 0 0
遗憾的是它们是<dbl>
而不是<int>
,但这可以通过as.integer
调用轻松解决。
这篇关于在Spaklyr中创建虚拟变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文