我尝试使用
spark_read_parquet
, 从“表”中读取列的子集
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
不是这样工作的。当像这样应用时,用于来重命名列,因此它的长度应该等于输入的长度。
使用方法是(请注意
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))