sparklyr:使用mutate函数创建新列

kadbb459  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(507)

如果这种问题不能用sparkyr解决,我感到非常惊讶:

iris_tbl <- copy_to(sc, aDataFrame)

# date_vector is a character vector of element

# in this format: YYYY-MM-DD (year, month, day)

for (d in date_vector) {
   ...
   aDataFrame %>% mutate(newValue=gsub("-","",d)))
   ...
}

我收到这个错误:

Error: org.apache.spark.sql.AnalysisException: Undefined function: 'GSUB'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 2 pos 86
    at org.apache.spark.sql.catalyst.catalog.SessionCatalog.failFunctionLookup(SessionCatalog.scala:787)
    at org.apache.spark.sql.hive.HiveSessionCatalog.lookupFunction0(HiveSessionCatalog.scala:200)
    at org.apache.spark.sql.hive.HiveSessionCatalog.lookupFunction(HiveSessionCatalog.scala:172)
    at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveFunctions$$anonfun$apply$13$$anonfun$applyOrElse$6$$anonfun$applyOrElse$39.apply(Analyzer.scala:884)
    at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveFunctions$$anonfun$apply$13$$anonfun$applyOrElse$6$$anonfun$applyOrElse$39.apply(Analyzer.scala:884)
    at org.apache.spark.sql.catalyst.analysis.package$.withPosition(package.scala:48)
    at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveFunctions$$anonfun$apply$13$$anonfun

但用这句话:

aDataFrame %>% mutate(newValue=toupper("hello"))

一切正常。有人帮忙吗?

rqcrx0a6

rqcrx0a61#

我强烈建议你阅读 sparklyr 继续之前的文件。特别是,您需要阅读关于如何将r转换为sql的部分(http://spark.rstudio.com/dplyr.html#sql_translation). 简而言之,r函数的一个非常有限的子集可用于 sparklyr Dataframe,以及 gsub 不是这些函数之一(但是 toupper 是)。如果你真的需要 gsub 你必须 collect 将数据导入本地Dataframe,然后 gsub 它(你仍然可以使用 mutate ),那么 copy_to 回到Spark。

bqucvtff

bqucvtff2#

值得补充的是,可用的文档说明:

Hive功能

许多hive的内置函数(udf)和内置聚合函数(udaf)可以在dplyr的mutate和summary中调用。languange reference udf页面提供了可用函数的列表。

Hive

如文件中所述,一个可行的解决方案应该可以通过使用 regexp_replace :
返回替换中所有子字符串所产生的字符串 INITIAL_STRING 与中定义的java正则表达式语法匹配 PATTERN 例如 REPLACEMENT. 例如, regexp_replace("foobar", "oo|ar", "") 退货 'fb.' 请注意,在使用预定义字符类时需要注意:使用 '\s' 因为第二个参数与字母匹配 s; '\\s' 必须匹配空格等。

Sparkyr方法

考虑到上述情况,应该可以将 sparklyr 管道 regexp_replace 达到应用同源的效果 gsub 在所需列上。测试代码删除 - 内的字符 sparklyr 在变量中 d 可按如下方式构建:

aDataFrame %>% 
  mutate(clnD = regexp_replace(d, "-", "")) %>%
  # ...

哪里 class(aDataFrame ) 退货: "tbl_spark" ... .

相关问题