簡體   English   中英

sparkR 中的 R fastdummies 等效項

[英]R fastdummies equivalent in sparkR

我有一個包含以下數據的 Spark 數據框:

categories
1       John
2       Luis
3       Dora

為此,我需要創建一個熱門結局版本:

  categories categories_Dora categories_John categories_Luis
1       John               0               1               0
2       Luis               0               0               1
3       Dora               1               0               0

這是我目前的代碼:

test <- data.frame("SN" = 1:2, "Age" = c(21,15), "Name" = c("John;Luis","Dora"))
df <- as.DataFrame(test)
df_2 = selectExpr(df, "split(Name, ';') AS categories","Name")


dat <- df_2 %>% 
 mutate(categories=explode(df_2$categories)) %>%
 select("categories")

我目前的解決方案是將其轉換為常規 R 數據幀,並應用快速虛擬函數。 這適用於這種情況,但不適用於大型數據集:

r_df = dat %>% 
       SparkR::collect()
dummy_r = dummy_cols(r_df)

如何使用 sparkR 數據幀獲得相同的結果?

編輯:我不能只使用 sparklyr sparkR

它可以使用 Sparklyr 來完成,它具有許多公開的特征轉換器功能。

library(sparklyr)

test <- data.frame("categories" = c("John", "Luis","Dora"))

sc <- sparklyr::spark_connect(master = "local")

d_tbl <- copy_to(sc, test, overwrite = TRUE)

d_tbl %>%
  ft_string_indexer(input_col = "categories", output_col = "cat_num") %>%
  mutate(cat_num = cat_num + 1) %>%
  ft_one_hot_encoder("cat_num", "cat_onehot") %>%
  sdf_separate_column("cat_onehot", 
                      paste("categories", pull(., categories), sep="_")) %>%
  select(-cat_num, -cat_onehot)

輸出:

# Source: spark<?> [?? x 4]
  categories categories_John categories_Luis categories_Dora
  <chr>                <dbl>           <dbl>           <dbl>
1 John                     0               0               0
2 Luis                     0               1               0
3 Dora                     0               0               1

ft_string_indexer生成一個列名cat_num ,其中包含每個類別的數值。 與 R 中的as.numeric(factor)非常相似。+1 只是讓索引從 1 到ft_one_hot_encoder在 Spark 級別發揮了神奇作用,該函數返回一個矢量化值,如帶有編碼的列表。 函數sdf_separate_column將編碼擴展到列。 paste使用類別級別生成列名。 select刪除轉換中使用的不必要的列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM