sparklyr:从列表中填充“spark_read_parquet 路径”参数
sparklyr: fill `spark_read_parquet path` argument from list
我想以相同的方式处理同一个 s3 存储桶中的多个文件。所以,我创建了一个文件名列表:
dt <- seq(as.Date("1991/12/23"), by = "day", length.out = 5)
dt_ls <- paste0('s3://donuts/date=',dt)
然后我 运行 对该列表进行 for 循环:
for (i in 1:length(dt)){
df <- spark_read_parquet(sc, "df", path = dt_ls[i]) #readin
df_tbl <- tbl(sc, "df") #convert to tbl
#perform w/e operations you like
rm(df)
}
但是,我在尝试分配 path = dt_ls[i]
时立即遇到两个错误之一。
Error in UseMethod("invoke"): no applicable method for 'invoke' applied to an object of class "character"
或:
Error in as.vector(x, "character"): cannot coerce type 'environment' to vector of type 'character'
我在 运行 隔离单行时看到相同的错误,例如:
tmp <- spark_read_parquet(sc, "tmp", path = dt_ls[1])
我读到的这些错误是我无法将保存为对象的 s3 文件路径传递给 spark_read_parquet
,因为由于命令的后端正在调用 invoke
,它不会直接到我传递给它的列表索引的内容。因此,我必须将路径直接写入 path
参数。
这样的解释正确吗?是否有变通办法让我可以自动打开所有这些文件?
解决方案:
出现在列表中 chr 对象周围的引号似乎是问题所在。在将列表索引传递给 spark_read_parquet
中的 path
参数时删除这些引号允许函数正常 运行。
所以简单的解决方案:
tmp <- spark_read_parquet(sc, "tmp", path = noquotes(dt_ls[1]))
以及导致问题的输入示例:
[1] “s3://donuts/date=2021-12-23”
[2] “s3://donuts/date=2021-12-24”
[3] “s3://donuts/date=2021-12-25”
因此传递的文件路径必须类似于:
[1] s3://donuts/date=2021-12-23
我想以相同的方式处理同一个 s3 存储桶中的多个文件。所以,我创建了一个文件名列表:
dt <- seq(as.Date("1991/12/23"), by = "day", length.out = 5)
dt_ls <- paste0('s3://donuts/date=',dt)
然后我 运行 对该列表进行 for 循环:
for (i in 1:length(dt)){
df <- spark_read_parquet(sc, "df", path = dt_ls[i]) #readin
df_tbl <- tbl(sc, "df") #convert to tbl
#perform w/e operations you like
rm(df)
}
但是,我在尝试分配 path = dt_ls[i]
时立即遇到两个错误之一。
Error in UseMethod("invoke"): no applicable method for 'invoke' applied to an object of class "character"
或:
Error in as.vector(x, "character"): cannot coerce type 'environment' to vector of type 'character'
我在 运行 隔离单行时看到相同的错误,例如:
tmp <- spark_read_parquet(sc, "tmp", path = dt_ls[1])
我读到的这些错误是我无法将保存为对象的 s3 文件路径传递给 spark_read_parquet
,因为由于命令的后端正在调用 invoke
,它不会直接到我传递给它的列表索引的内容。因此,我必须将路径直接写入 path
参数。
这样的解释正确吗?是否有变通办法让我可以自动打开所有这些文件?
解决方案:
出现在列表中 chr 对象周围的引号似乎是问题所在。在将列表索引传递给 spark_read_parquet
中的 path
参数时删除这些引号允许函数正常 运行。
所以简单的解决方案:
tmp <- spark_read_parquet(sc, "tmp", path = noquotes(dt_ls[1]))
以及导致问题的输入示例:
[1] “s3://donuts/date=2021-12-23”
[2] “s3://donuts/date=2021-12-24”
[3] “s3://donuts/date=2021-12-25”
因此传递的文件路径必须类似于:
[1] s3://donuts/date=2021-12-23