如果这种问题不能用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"))
一切正常。有人帮忙吗?
2条答案
按热度按时间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。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
可按如下方式构建:哪里
class(aDataFrame )
退货:"tbl_spark" ...
.