【问题标题】:sparkR - subset values in listsparkR - 列表中的子集值
【发布时间】:2017-10-12 15:16:28
【问题描述】:

如何为 spark 数据框执行以下任务。 在 dplyr 中,我会这样做:

library(dplyr)
df1 <- data.frame(x = 1:10, y = 101:110)
df2 <- data.frame(r = 5:10, s = 205:210)
df3 <- df1 %>% filter(x %in% df2$r)

如何对 sparkR 数据帧执行 filter(x %in% df2$r) 命令?

【问题讨论】:

    标签: r apache-spark filter sparkr


    【解决方案1】:

    我刚刚有类似的问题,这似乎适用于从列表中过滤:

    df3 <- filter(df1, ("x in ('string1','string2','string3')"))
    

    在您的情况下,您可能需要考虑加入

    df3 <- drop(join(df1, SparkR::distinct(SparkR::select(df2,'r')), df1$x==df2$r),'r')
    

    (可能有点太贵了)..

    干杯, 安娜

    【讨论】:

    • 问题是不能枚举('string1', 'string2',...)中的所有x,这样的'strings'有1000个
    【解决方案2】:

    不要将查找转换为SparkDataFrame

    > df1 <- createDataFrame(data.frame(x = 1:10, y = 101:110))
    > df2 <- data.frame(r = 5:10, s = 205:210)
    > filter(df1, df1$x %in% df2$r)
    SparkDataFrame[x:int, y:int]
    

    或两者都转换和join:

    > df1 <- createDataFrame(data.frame(x = 1:10, y = 101:110))
    > df2 <- createDataFrame(data.frame(r = 5:10, s = 205:210))
    > join(df1, df2, df1$x == df2$r, "leftsemi")
    SparkDataFrame[x:int, y:int]
    

    不要将dplyr 与 SparkR 一起使用。对于dplyr 兼容的API,请使用sparklyr

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 2020-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多