在 SparkR 的 DataFrame 列上使用 substr()
Use of substr() on DataFrame column in SparkR
我正在使用 SparkR 并希望使用 substr()
命令来隔离列中包含的字符串的最后一个字符。如果我将 StartPosition 和 EndPosition 设置为常量,我可以让 substr()
工作:
substr(sdfIris$Species, 8, 8)
但是当我尝试使用来自 DataFrame 的值设置这些参数时:
sdfIris <- createDataFrame(sqlContext, iris)
sdfIris$Len <- length(sdfIris$Species)
sdfIris$Last <- substr(sdfIris$Species, sdfIris$Len, sdfIris$Len)
Error in as.integer(start - 1) : cannot coerce type 'S4' to vector of type 'integer'
看来sdfIris$Len
返回的结果可能是一个单格DataFrame,参数需要整数。
我试过了collect(sdfIris$Len)
,但是:
Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘collect’ for signature ‘"Column"’
这似乎不协调。 substr()
似乎将 sdfIris$Len
视为 DataFrame,但 collect()
似乎将其视为列。
我已经通过使用 registerTempTable
和使用 SparkSQL 的 substr 来隔离最后一个字符确定了一个解决方法,但我希望避免切换到 SQL.
如何在具有动态开始和结束参数的 DataFrame 列上使用 SparkR substr()
?
它不是最优的,但你可以使用 expr
:
df <- createDataFrame(
sqlContext,
data.frame(s=c("foo", "bar", "foobar"), from=c(1, 2, 0), to=c(2, 3, 5))
)
select(df, expr("substr(s, from, to)")) %>% head()
## substr(s,from,to)
## 1 fo
## 2 ar
## 3 fooba
或selectExpr
:
selectExpr(df, "substr(s, from, to)") %>% head()
## substr(s,from,to)
## 1 fo
## 2 ar
## 3 fooba
以及等效的 SQL 查询。
我正在使用 SparkR 并希望使用 substr()
命令来隔离列中包含的字符串的最后一个字符。如果我将 StartPosition 和 EndPosition 设置为常量,我可以让 substr()
工作:
substr(sdfIris$Species, 8, 8)
但是当我尝试使用来自 DataFrame 的值设置这些参数时:
sdfIris <- createDataFrame(sqlContext, iris)
sdfIris$Len <- length(sdfIris$Species)
sdfIris$Last <- substr(sdfIris$Species, sdfIris$Len, sdfIris$Len)
Error in as.integer(start - 1) : cannot coerce type 'S4' to vector of type 'integer'
看来sdfIris$Len
返回的结果可能是一个单格DataFrame,参数需要整数。
我试过了collect(sdfIris$Len)
,但是:
Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘collect’ for signature ‘"Column"’
这似乎不协调。 substr()
似乎将 sdfIris$Len
视为 DataFrame,但 collect()
似乎将其视为列。
我已经通过使用 registerTempTable
和使用 SparkSQL 的 substr 来隔离最后一个字符确定了一个解决方法,但我希望避免切换到 SQL.
如何在具有动态开始和结束参数的 DataFrame 列上使用 SparkR substr()
?
它不是最优的,但你可以使用 expr
:
df <- createDataFrame(
sqlContext,
data.frame(s=c("foo", "bar", "foobar"), from=c(1, 2, 0), to=c(2, 3, 5))
)
select(df, expr("substr(s, from, to)")) %>% head()
## substr(s,from,to)
## 1 fo
## 2 ar
## 3 fooba
或selectExpr
:
selectExpr(df, "substr(s, from, to)") %>% head()
## substr(s,from,to)
## 1 fo
## 2 ar
## 3 fooba
以及等效的 SQL 查询。