【问题标题】:SparklyR separate one Spark DataFrame column into two columnsSparklyR 将一个 Spark DataFrame 列分成两列
【发布时间】:2017-06-08 04:18:04
【问题描述】:

我有一个数据框,其中包含一个名为 COL 的列,其结构如下:

VALUE1###VALUE2

以下代码正在运行

library(sparklyr)
library(tidyr)
library(dplyr)
mParams<- collect(filter(input_DF, TYPE == ('MIN')))
mParams<- separate(mParams, COL, c('col1','col2'), '\\###', remove=FALSE)

如果我删除 collect,我会收到此错误:

Error in UseMethod("separate_") : 
  no applicable method for 'separate_' applied to an object of class "c('tbl_spark', 'tbl_sql', 'tbl_lazy', 'tbl')"

是否有任何替代方法可以实现我想要的,但没有收集我的火花驱动器上的所有东西?

【问题讨论】:

    标签: r dplyr tidyr sparklyr


    【解决方案1】:

    您可以使用 ft_regex_tokenizer 后跟 sdf_separate_column。

    ft_regex_tokenizer 将基于正则表达式将列拆分为向量类型。 sdf_separate_column 会将其拆分为多个列。

    mydf %>% 
        ft_regex_tokenizer(input_col="mycolumn", output_col="mycolumnSplit", pattern=";") %>% 
        sdf_separate_column("mycolumnSplit", into=c("column1", "column2")
    

    更新:在最新版本的 sparklyr 中,参数 input.col 和 output.col 已分别重命名为 input_col 和 output_col。

    【讨论】:

      【解决方案2】:

      Sparklyr 0.5 版刚刚是released,它包含可以做到这一点的ft_regex_tokenizer() function

      一个基于正则表达式的分词器,可以通过使用 提供正则表达式模式来分割文本(默认)或重复 匹配正则表达式(如果 gaps 为 false)。

      library(dplyr)
      library(sparklyr)
      ft_regex_tokenizer(input_DF, input_col = "COL", output_col = "ResultCols", pattern = '\\###')
      

      拆分后的列“ResultCols”将是一个列表。

      【讨论】:

      • 我知道ft_regex_tokenizer,但问题是将值分开并将其存储在 2 列而不是 1 列中。 tidyr::unnest 只是在 collect 之后在本地工作,这在我的情况下是不合适的,因为我必须使用 1 个输出列聚合数据...
      • 注意:在最近的 sparklyr 版本中,参数 input.col 和 output.col 已分别重命名为 input_col 和 output_col。
      • 我建议编辑答案以显示 input_col 和 output_col ,因为这是当前的实现。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 2019-04-05
      • 2017-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多