различное поведение при использовании createDataFrame и read.df в SparkR

Я использую Спарк 1.5.1

Когда я делаю это

df <- createDataFrame(sqlContext, iris)

#creating a new column for category "Setosa"

df$Species1<-ifelse((df)[[5]]=="setosa",1,0)

head(df) 

вывод: создан новый столбец

      Sepal.Length  Sepal.Width  Petal.Length  Petal.Width    Species
1     5.1           3.5           1.4          0.2            setosa
2     4.9           3.0           1.4          0.2            setosa
3     4.7           3.2           1.3          0.2            setosa
4     4.6           3.1           1.5          0.2            setosa
5     5.0           3.6           1.4          0.2            setosa
6     5.4           3.9           1.7          0.4            setosa

но когда я сохранил набор данных радужной оболочки в виде файла CSV и попытался прочитать его и преобразовать в фреймворк данных sparkR

df <- read.df(sqlContext,"/Users/devesh/Github/deveshgit2/bdaml/data/iris/",
              source = "com.databricks.spark.csv",header = "true",inferSchema = "true")

теперь, когда я пытаюсь создать новый столбец

df$Species1<-ifelse((df)[[5]]=="setosa",1,0)

Я получаю следующую ошибку:

16/02/05 12:11:01 ERROR RBackendHandler: col on 922 failed Error in select(x, x$"*", alias(col, colName)) :    
error in evaluating the argument 'col' in selecting a method for function 'select': Error in invokeJava(isStatic = FALSE, objId$id, methodName, ...) :    
org.apache.spark.sql.AnalysisException: Cannot resolve column name "Sepal.Length" among (Sepal.Length, Sepal.Width, Petal.Length, Petal.Width, Species);    
at org.apache.spark.s

person Devesh    schedule 05.02.2016    source источник


Ответы (1)


SparkSQL не поддерживает имена со встроенными точками. Когда вы используете createDataFrame, имена автоматически настраиваются для вас, для других методов вы должны указать схему явно:

schema <- structType(
  structField("Sepal_Length", "double"),
  structField("Sepal_Width", "double"),
  structField("Petal_Length", "double"),      
  structField("Petal_Width", "double"),
  structField("Species", "string"))

df <- read.df(sqlContext, path, source = "com.databricks.spark.csv",
  header="true", schema=schema)
person zero323    schedule 07.02.2016