2016-06-22 27 views
0

我定義下列自定義UDF:我如何註冊我的自定義UDF這樣我就可以在火花shell中運行它

def stddev1 (columnName: Column): Column = { 
    sqrt(avg(columnName * columnName) - avg(columnName) * avg(columnName)) 
} 

我想運行在火花殼此功能,並與一些示例數據測試但我一直在遇到錯誤:「不支持類型爲org.apache.spark.sql.Column的架構。」

我可能要登記,但我不確定如何做到這一點

回答

1

這取決於你想如何使用它。例如,這工作得很好:

val df = sc.parallelize(Seq(1,2,3,4)).toDF("myCol") 
df.show 

>+-----+ 
>|myCol| 
>+-----+ 
>| 1| 
>| 2| 
>| 3| 
>| 4| 
>+-----+ 

def stddev(col: Column): Column = sqrt(avg(col * col) - avg(col) * avg(col)) 
df.agg(stddev($"myCol")).first 

> [1.118033988749895] 

但是,如果你想一個Spark SQL語句中使用它,你需要這樣的事情:

val squared = (s: Int) => { 
    s * s 
} 
sqlContext.udf.register("square", squared) 

%sql select id, square(id) as id_squared from test 

檢查this出更多的信息。

相關問題