spark_read_parquet 中的列选项

The columns option in spark_read_parquet

我尝试使用 spark_read_parquet

从 'table' 中读取列的子集
temp <- spark_read_parquet(sc, name='mytable',columns=c("Col1","Col2"),
                                 path="/my/path/to/the/parquet/folder")

但是我得到了错误:

Error: java.lang.IllegalArgumentException: requirement failed: The number of columns doesn't match.
Old column names (54): .....

我的语法正确吗?我尝试使用 columns 参数在谷歌上搜索一个(真实的)代码示例,但找不到。

(我提前道歉...我真的不知道如何给你一个涉及火花和云的可重现的例子。)

TL;DR 这不是 columns 的工作方式。当像这样应用时 are used to ,因此它的长度应该等于输入的长度。

使用方法是(请注意memory = FALSE,这对它的正确工作至关重要):

spark_read_parquet(
  sc, name = "mytable", path = "/tmp/foo", 
  memory = FALSE
) %>% select(Col1, Col2) 

可选地后跟

... %>% 
  sdf_persist()

如果你有一个字符向量,你可以使用rlang:

library(rlang)

cols <- c("Col1", "Col2")

spark_read_parquet(sc, name="mytable", path="/tmp/foo", memory=FALSE) %>% 
  select(!!! lapply(cols, parse_quosure))