使用R中的spark过滤数据

时间:2018-08-01 16:11:14

标签: r sparklyr

我有一个Spark数据框,如下所示:

> head(marketdata_spark)
# Source:   lazy query [?? x 5]
# Database: spark_connection
AD_CC_CC AD_CC_CC_1 CL_CC_CC CL_CC_CC_1       Date
 <dbl>      <dbl>    <dbl>      <dbl>     <date>
 -380       -380    -1580      -1580 2018-02-05
   20         20     -280       -280 2018-02-06
 -700       -700    -1730      -1730 2018-02-07
 -460       -460    -1100      -1100 2018-02-08
  260        260    -1780      -1780 2018-02-09
  480        480      380        380 2018-02-12

我想按如下所示过滤值,但出现以下错误:

marketdata_spark %>% filter(AD_CC_CC > 10.0)
  

storage.mode(x)<-“ double”中的错误:       (列表)对象不能强制输入“ double”

我尝试将列转换为整数,但仍然给我同样的错误。不知道出什么问题了。

2 个答案:

答案 0 :(得分:1)

我知道这是一篇旧文章,但我想补充一下Alper t。 Turker在评论中说,对我而言确实是正确的。

之前,我只加载sparklyr,就像这样:

library(sparklyr)

解决我的问题的是同时加载sparklyr dplyr

library(sparklyr)
library(dplyr)

如果以此顺序加载,则dplyr :: filter将掩盖sparklyr :: filter,后者无法处理列上的过滤器操作。

答案 1 :(得分:-2)

在这里完美运行

lines = 'AD_CC_CC AD_CC_CC_1 CL_CC_CC CL_CC_CC_1     Date
          -380       -380    -1580      -1580     2018-02-05
            20         20     -280       -280     2018-02-06
          -700       -700    -1730      -1730     2018-02-07
          -460       -460    -1100      -1100     2018-02-08
           260        260    -1780      -1780     2018-02-09
           480        480      380        380     2018-02-12'

marketdata_spark = read.table(textConnection(lines),header = T)

str(marketdata_spark)
#'data.frame':  6 obs. of  5 variables:
# $ AD_CC_CC  : int  -380 20 -700 -460 260 480
# $ AD_CC_CC_1: int  -380 20 -700 -460 260 480
# $ CL_CC_CC  : int  -1580 -280 -1730 -1100 -1780 380
# $ CL_CC_CC_1: int  -1580 -280 -1730 -1100 -1780 380
# $ Date      : Factor w/ 6 levels "2018-02-05","2018-02-06",..: 1 2 3 4 5 6

library(dplyr)
marketdata_spark %>% filter(AD_CC_CC > 10.0)
  AD_CC_CC AD_CC_CC_1 CL_CC_CC CL_CC_CC_1       Date
#1       20         20     -280       -280 2018-02-06
#2      260        260    -1780      -1780 2018-02-09
#3      480        480      380        380 2018-02-12

另一种替代方法是使用此方法:

marketdata_spark[marketdata_spark$AD_CC_CC > 10.0,]