我有一个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”
我尝试将列转换为整数,但仍然给我同样的错误。不知道出什么问题了。
答案 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,]