使用spark_read_parquet读取列的子集

问题描述 投票:0回答:1

我尝试使用

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
参数在谷歌上搜索(真实的)代码示例,但找不到任何内容。

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

r apache-spark sparklyr
1个回答
2
投票

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))
© www.soinside.com 2019 - 2024. All rights reserved.