使用Spark将函数中的多个列名传递给dplyr::distinct()
我想在将使用使用Spark将函数中的多个列名传递给dplyr::distinct(),r,apache-spark,dplyr,nse,R,Apache Spark,Dplyr,Nse,我想在将使用dplyr::distinct()的函数中指定未知数量的列名。我目前的尝试是: myFunction <- function(table, id) { table %>% dplyr::distinct(.data[[id]]) } 接下来,我还有其他失败的尝试: myFunction <- function(table, id) { table %>% dplyr::distinct(.dots = id) } myF
dplyr::distinct()
的函数中指定未知数量的列名。我目前的尝试是:
myFunction <- function(table, id) {
table %>%
dplyr::distinct(.data[[id]])
}
接下来,我还有其他失败的尝试:
myFunction <- function(table, id) {
table %>%
dplyr::distinct(.dots = id)
}
myFunction(mtcars_tbl, id)
# Source: spark<?> [?? x 1]
.dots
<list>
1 <named list [2]>
#####
myFunction <- function(table, id) {
table %>%
dplyr::distinct_(id)
}
myFunction(mtcars_tbl, id)
Error in UseMethod("distinct_") :
no applicable method for 'distinct_' applied to an object of class "c('tbl_spark', 'tbl_sql', 'tbl_lazy', 'tbl')"
myFunction%
dplyr::distinct(.dots=id)
}
myFunction(mtcars\u tbl,id)
#来源:火花[?x 1]
.圆点
1.
#####
myFunction%
dplyr::distinct(id)
}
myFunction(mtcars\u tbl,id)
UseMethod中的错误(“不一致的”):
没有适用于“c”类对象的“distinct”方法(“tbl\U spark”、“tbl\U sql”、“tbl\U lazy”、“tbl”)
Distinct一次应用于表的所有列。考虑一个示例表:
A B
1 4
1 4
2 3
2 3
3 3
3 5
目前尚不清楚仅对A列应用distinct而不对B列应用distinct应该返回什么。下面的示例显然不是一个好的选择,因为它打破了a列和B列之间的关系。例如,原始数据集中没有(a=2,B=4)行
A B
1 4
2 4
3 3
3
3
5
因此,最好的方法是只选择您首先想要的列,然后使用distinct。更像是:
myFunction%
dplyr::select(dplyr::全部(id))%>%
dplyr::distinct()
}
分为两个步骤!但是,请注意,当id=c(“cyl”、“gear”)
(或以其他方式包含多个数据变量名)时,错误为error:必须使用字符串将数据代词子集。因此,我认为您无法使用当前代码(至少使用dplyr 1.0.6)实现我的“期望回报”。如果您将select语句更改为dplyr::select(dplyr::all_of(id))
,我很乐意接受。谢谢,没问题。谢谢你的更正,我没有仔细测试我答案的那一部分。我使用的另一种方法是select(!!!syms(id))
。这会将字符串转换为符号,但对于此应用程序而言,其清晰度不如all\u
。
A B
1 4
2 4
3 3
3
3
5