В 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