在 SparkR 1.5.0 中,我们如何在连接公共列后明确指定列?
In SparkR 1.5.0, how do we specify a column unambiguously after a join on common column?
我在同名的列上加入了两个数据框。
oe = join(orders, emp, orders$EmployeeID == emp$EmployeeID)
生成的数据框有两列同名EmployeeID
现在分组依据甚至打印列名
peremp = groupBy(oe, 'EmployeeID', sales = n(oe$OrderID))
oe$EmployeeID
失败并出现错误
Error in invokeJava(isStatic = FALSE, objId$id, methodName, ...) :
org.apache.spark.sql.AnalysisException: Reference 'EmployeeID' is
ambiguous, could be: EmployeeID#36, EmployeeID#69.;
一个简单的解决方法似乎是预先使用 withColumnRenamed 函数重命名其中一个表中的列。我会尝试的另一种方法是从列函数中找出位置,然后删除该列,但我没有看到明显有效的方法。
您可以通过父数据框访问列。首先让我们创建一些示例数据:
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
我在同名的列上加入了两个数据框。
oe = join(orders, emp, orders$EmployeeID == emp$EmployeeID)
生成的数据框有两列同名EmployeeID
现在分组依据甚至打印列名
peremp = groupBy(oe, 'EmployeeID', sales = n(oe$OrderID))
oe$EmployeeID
失败并出现错误
Error in invokeJava(isStatic = FALSE, objId$id, methodName, ...) :
org.apache.spark.sql.AnalysisException: Reference 'EmployeeID' is ambiguous, could be: EmployeeID#36, EmployeeID#69.;
一个简单的解决方法似乎是预先使用 withColumnRenamed 函数重命名其中一个表中的列。我会尝试的另一种方法是从列函数中找出位置,然后删除该列,但我没有看到明显有效的方法。
您可以通过父数据框访问列。首先让我们创建一些示例数据:
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