【问题标题】:Subtract all elements in a column in sparkR减去 sparkR 列中的所有元素
【发布时间】:2015-08-18 13:35:32
【问题描述】:

我在 sparkR 中有 DataFrame 'res'。 'res' 包含 ID 和日期。所以第一个条目看起来像这样 'ID' = 1 2 3 ... 和 'date' = "2012-6-5", "2013-5-5", "2015-10-11" ...

我想创建一个新数据集,其中所有“日期”都减去“2010-01-01”。如何才能做到这一点? 如果我只想用整数减去 DataFrame 中的所有元素,我会遇到完全相同的问题。

在 sparkR 我试过这个

newres <- withColumn(res, "subtract", res$date - as.Date("2010-01-01") )

此运行但当我输入 head(newres) 时出现错误:消息:“returnstatus==0 is not True.”

【问题讨论】:

    标签: sparkr


    【解决方案1】:

    在您之前的问题 (Convert string to date in sparkR) 中,我读到类型转换不是在 R 中执行的问题,而不是在 SparkR 中执行的问题。在我的设置中,我可以将所有内容转换为 R 中的整数并在 SparkR 中进行减法,如下所示:

    df <- data.frame(user_id=c(1,1,2,2),
                    time=c("2015-7-10","2015-8-04","2015-8-8","2015-7-10"))
    
    df$time <- as.Date(df$time)
    df$time <- as.numeric(df$time)
    
    date <- as.numeric(as.Date("2010-01-01"))
    
    res <- createDataFrame(sqlContext, df)
    
    newRes <- withColumn(res, "subtract",res$time - date)
    
    collect(newRes)
    

    这给了我

      user_id  time subtract
    1       1 16626     2016
    2       1 16651     2041
    3       2 16655     2045
    4       2 16626     2016
    

    我希望这可行,因为您说您也遇到了整数减法问题...此解决方案的唯一“问题”是 R 中的时间转换:现在您仅限于完全适合内存的 DataFrame你的 R 环境。

    【讨论】:

    • 我只是通过使用 R 以同样的方式做到这一点。当长度(u )=70000。在我的情况下它已经足够快了。
    • 仍然想知道整数减法在 SparkR 中是否适合您?
    • 确实如此。我可以毫无问题地在 sparkR 中运行您的示例。
    猜你喜欢
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2022-01-14
    • 2020-01-05
    • 1970-01-01
    • 2018-08-11
    相关资源
    最近更新 更多