首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache Spark SQL中的moving median as a window function (UDAF)

Apache Spark SQL中的moving median as a window function (UDAF)
EN

Stack Overflow用户
提问于 2016-06-06 23:27:48
回答 1查看 501关注 0票数 2

我正在尝试将"moving median“函数实现为一个窗口函数,以便在Apache Spark SQL中使用它。

我正在尝试在Scala中将其实现为UDAF。Spark的版本是1.6.1。

我尝试了两种方式调用我的UDAF (“中位数”):

1)作为SQL查询:

代码语言:javascript
复制
val timeSeries = ... // get a DataFrame
...
timeSeries.registerTempTable("time_series")
timeSeries.sqlContext.udf.register("median", new MedianUDAF)
val timeSeriesWithMovingAverage = timeSeries.sqlContext.sql(s"select *, median(value_column) over (partition by metrics_name order by time_column) from time_series")

结果是:

Failure(org.apache.spark.sql.AnalysisException:找不到窗口函数median;)

2)作为DataFrame接口调用:

代码语言:javascript
复制
val timeSeriesWithMovingAverage = timeSeries.withColumn("movingAvg", medianFunction(timeSeries("value_column")).over(windowSpec))

结果是:

在窗口操作中不支持Failure(java.lang.UnsupportedOperationException: MedianUDAF(value#16)。)

有没有办法使用UDAF作为窗口函数?例如,计算移动中位数(不是移动平均值,而是中位数)。

EN

回答 1

Stack Overflow用户

发布于 2016-06-07 00:05:57

不幸的是,我相信你不能在窗口函数中使用UDFsUDAFs。窗口函数不是Spark原生的--它们使用配置单元,这排除了使用Spark定义的UDFsUDAFs

理论上,我认为你可以直接在Hive中创建UDAF,然后从Spark调用它。但这并不是我以前尝试过的东西--它看起来一定是可能的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37661248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档