Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Spark将函数中的多个列名传递给dplyr::distinct()_R_Apache Spark_Dplyr_Nse - Fatal编程技术网

使用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