在Spaklyr中创建虚拟变量? [英] Creating dummy variables in sparklyr?

查看:0
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆