2

我正在尝试使用“spark_read_csv()”函数的“列”参数。我正在尝试使用 sparklyr 从 hdfs 导入 csv 文件,我想知道如何指定单个变量类或所有变量类。

require(sparklyr)
named_vct_colclasses <- c("character", "integer", "integer")
db_in <- spark_read_csv(sc, "spark_tbl_name", "path_to_file", 
                        infer_schema = FALSE,
                        columns = named_vct_colclasses) 

csv 已正确导入,但我无法强加列类。

我尝试过使用命名向量,但效果不佳。这是我想使用 spark_read_csv() 重现的常用 read.csv 命令

read.csv("path_to_file", colClasses = c("character", rep("integer", 2))

或者

 read.csv("path_to_file", colClasses = c("var_name" = "character"))

谢谢

4

1 回答 1

0

我知道这有点晚了,但使用命名向量或列表是可行的。见示例代码:

library(dplyr)
library(sparklyr)


sc <- spark_connect(master='local', version='2.0.2')

iris_tbl<-copy_to(sc,iris)
spark_write_csv(iris_tbl,"iris.csv")
columns<-c("numeric","numeric","numeric","numeric","character")
names(columns)<-colnames(iris)
spark_read_csv(sc,"iris","iris.csv",infer_schema = FALSE,columns = columns)

PS。确保列名与 CSV 中的完全相同,例如,列名由“.”更改。写入 CSV 时分隔为 '_' 分隔。

> colnames(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"     
> colnames(iris_tbl)
[1] "Sepal_Length" "Sepal_Width"  "Petal_Length" "Petal_Width"  "Species"     
于 2017-07-11T06:50:31.233 回答