【问题标题】:Filter data using spark in R在 R 中使用 spark 过滤数据
【发布时间】:2018-08-01 16:11:14
【问题描述】:

我有一个如下火花数据框:

> 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) 中的错误

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

【问题讨论】:

  • 你已经导入了一些阴影 dplyr::filter 的包 - 否则它应该可以正常工作。检查例如 help(filter) 以查看附加了哪些变体。
  • @user8371915 我相信情况确实如此。我在 2-3 天后运行了相同的代码,它按要求完美运行。
  • 对我来说它被stats::filter 遮蔽,它从不显式加载(默认加载stats)。奇怪。

标签: r sparklyr


【解决方案1】:

我知道这是一篇旧帖子,但我想补充一下 Alper t. Turker 在 cmets 中说对我来说确实如此。

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

library(sparklyr)

解决我的问题的方法是同时加载sparklyr 然后 dplyr:

library(sparklyr)
library(dplyr)

如果按此顺序加载,dplyr::filter 将屏蔽 sparklyr::filter,它无法处理列上的过滤操作。

【讨论】:

    【解决方案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,]
    

    【讨论】:

    • 我认为您提供的解决方案适用于 R 数据框,而不适用于 Spark 数据框。我尝试了替代解决方案,它给了我以下错误:marketdata_spark[marketdata_spark$AD_CC_CC > 10, ] 中的错误:维度数不正确
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 2020-09-04
    • 1970-01-01
    相关资源
    最近更新 更多