Как в SparkR 1.5.0 однозначно указать столбец после соединения с общим столбцом?

Я присоединил два фрейма данных к столбцу с одинаковым именем.

oe = join(orders, emp, orders$EmployeeID == emp$EmployeeID)

Результирующий фрейм данных имеет два столбца с одинаковыми именами EmployeeID

Теперь группа по имени столбца или даже печать имени столбца

peremp = groupBy(oe, 'EmployeeID', sales = n(oe$OrderID))
oe$EmployeeID

не работает с ошибкой

Ошибка в invokeJava(isStatic = FALSE, objId$id, methodName, ...):
org.apache.spark.sql.AnalysisException: ссылка «EmployeeID» неоднозначна, может быть: EmployeeID#36, EmployeeID#69. ;


person Kumar Deepak    schedule 30.09.2015    source источник


Ответы (2)


Вы можете получить доступ к столбцам через родительский фрейм данных. Сначала давайте создадим несколько примеров данных:

df1 <- createDataFrame(sqlContext, data.frame(id=c(1, 2, 3), v=c("a", "b", "c")))
df2 <- createDataFrame(sqlContext, data.frame(id=c(2, 3), v=c("g", "z")))
df <- join(df1, df2, df1$id == df2$id)
head(df)
##   id v id v
## 1  3 c  3 z
## 2  2 b  2 g

И доступ к столбцу v:

select(df, "v")
## 15/09/30 17:47:13 ERROR RBackendHandler: select on 131 failed
## Error in invokeJava(isStatic = FALSE, objId$id, methodName, ...) : 
##   org.apache.spark.sql.AnalysisException: Reference 'v' is ambiguous, could be
## ....

select(df, df1$v) %>% head
##   v
## 1 c
## 2 b
person zero323    schedule 30.09.2015

Одним из простых обходных путей является предварительное переименование столбца в одной из таблиц с помощью функции withColumnRenamed. Другой подход, который я бы попробовал, - это выяснить положение из функции столбцов, а затем удалить столбец, но я не вижу способа, который явно работает.

person Matthew Graves    schedule 30.09.2015
comment
Нет необходимости в обходных путях. Вы можете просто получить доступ к столбцам, используя функцию $ в родительском фрейме данных. - person zero323; 01.10.2015