2017-02-23 72 views
2

Я пытаюсь использовать аргумент 'columns' функции spark_read_csv(). Я пытаюсь импортировать csv-файл из hdfs с помощью sparklyr, и я хотел бы знать, как можно указать один класс переменных или все классы переменных.Указать классы столбцов с помощью sparklyr

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 импортирован правильно, но я не могу навязывать классы столбцов.

Я попытался использовать именованный вектор, но он не сработал. Это обычная команда read.csv, которую я хотел бы воспроизвести с помощью spark_read_csv()

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

или

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

Благодарности

+0

Я считаю, что он должен быть назван вектор, увы 'имен (named_vct_colclasses) <- vector_of_colnames' – mtoto

+0

Я пытался, но это, кажется, не будет достаточно. Я также искал всю страницу github, но я не нашел пример –

ответ

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"  
+0

Спасибо! теперь это сработало. Вероятно, это была ошибка. –

Смежные вопросы