关闭

自定义spark udf计算单词的长度

标签: spark udfspark
730人阅读 评论(0) 收藏 举报
分类:

Spark Sql的UDF函数非常好用,相比Hive,很简洁:

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.types.StructType
import org.apache.spark.sql.types.StringType
import org.apache.spark.sql.types.StructField
import org.apache.spark.sql.Row
/**
 * scala内置函数,用户自定义函数
 * 统计单词的长度
 * 
 */
object UDF {
  def main(args:Array[String]):Unit={
    //1\获取context
    val sc=new SparkContext(new SparkConf().setAppName("UDFTest").setMaster("local[1]"))
    //2\获取sqlContext
    val sqlContext=new SQLContext(sc)
    //3\创建测试数据Array
    val datas=Array("tim","jony","cassis","fang")
    //4\并行化,创建RDD
    val dataRDD=sc.parallelize(datas,4)
    //5\转换为row
    val rows=dataRDD.map { x => Row(x) }
    //6\创建structType
    val structType=StructType(Array(StructField("name",StringType,true)))
    //7\创建Dataframe
    val df=sqlContext.createDataFrame(rows, structType)
    //8\注册表
    df.registerTempTable("t_test")
    //9\注册统计长度的函数
    sqlContext.udf.register("str_len", (str:String)=>str.length())
    //10\sql语句,打印输出
//    sqlContext.sql("select str_len(name) from t_test").collect().foreach { x => println("长度是:"+x) }
    sqlContext.sql("select str_len(name) from t_test").show()
    //关闭资源
    sc.stop()    
  }
}
/**

结果:
+---+
|_c0|
+---+
|  3|
|  4|
|  6|
|  4|
+---+

*/

以上测试已经通过,可以根据自己需要做修改!如有不足之处,请各位批评指正!




1
0
查看评论

[2.5]详解spark sql用户自定义函数:UDF与UDAF

参考Spark官网 王家林DT大数据梦工厂场景上一篇文章已经介绍spark sql的窗口函数,并且了解到spark sql提供了丰富的内置函数供猿友们使用,辣为何还要用户自定义函数呢?实际的业务场景可能很负责,特别负责,内置函数hold不住,所以要spark sql提供了可扩展的内置函数接口:哥们...
  • PENGYUCHENG32109
  • PENGYUCHENG32109
  • 2016-06-29 21:58
  • 7022

用spark建立一个单词统计的应用

本文我们将建立一个简单的单词统计应用 创建rdd In [1]: wordsList = ['cat', 'elephant', 'rat', 'rat', 'cat'] word...
  • u013719780
  • u013719780
  • 2016-08-29 18:13
  • 6730

详解spark sql用户自定义函数:UDF与UDAF

场景 UDAF = USER DEFINED AGGREGATION FUNCTION11 上一篇文章已经介绍了spark sql的窗口函数,并知道Spark sql提供了丰富的内置函数供猿友们使用,辣为何还要用户自定义函数呢?实际的业务场景可能很复杂,内置函数hold不住,所以s...
  • xgjianstart
  • xgjianstart
  • 2017-02-09 20:57
  • 5011

Spark-sparksql-自定义udf

注册一个判断指定日期的星期数的SQL函数object UDFUtils { def main(args: Array[String]) { println(dayOfWeek("2017-05-14")) } def registerUDF(sqlContext...
  • qq_16038125
  • qq_16038125
  • 2017-05-20 09:57
  • 423

Spark编写UDF自定义函数(JAVA)

maven: org.apache.spark spark-core_2.10 1.6.0 org.apache.spark spark-sql_2.10 1.6.0 org.apache.spark spark-hive...
  • ZYJ_2012
  • ZYJ_2012
  • 2017-03-21 13:25
  • 2007

Spark SQL 用户自定义函数UDF、用户自定义聚合函数UDAF 教程(Java踩坑教学版)

http://www.cnblogs.com/xing901022/p/6436161.html 在Spark中,也支持Hive中的自定义函数。自定义函数大致可以分为三种: UDF(User-Defined-Function),即最基本的自定义函数,类似to_...
  • zdy0_2004
  • zdy0_2004
  • 2017-02-24 00:00
  • 588

spark sql中踩到的一个坑,自定义Udf会执行多次,即使在已经cache table的情况下

spark sql中踩到的一个坑,自定义Udf会执行多次,即使在已经cache table的情况下:  https://issues.apache.org/jira/browse/SPARK-15282 以前也没发现这个问题,因为如果一个UDF是无状态的话,其实执行多次并不会导致结果...
  • xiao_jun_0820
  • xiao_jun_0820
  • 2016-11-21 13:28
  • 770

华为OJC++编程题001.计算字符串最后一个单词的长度

描述:计算字符串最后一个单词的长度,单词以空格隔开。 输入:一个字符串,长度小于128 输出:一个整数N,最后一个单词的长度 #include #include using namespace std; int main() { string line; int len=0; int n...
  • taotanzhangfu
  • taotanzhangfu
  • 2016-07-16 08:46
  • 1317

简单SparkRDD单词计数操作

1 工具IDEA 2 添加jar依赖 3 spark的local模式 在自己电脑下创建文件: E://sparktext//text.txt然后写入: hadoop hbase hadoop hello world hive hive hello spark spark mapreduce...
  • u012429555
  • u012429555
  • 2016-05-14 23:43
  • 2242

计算字符串最后一个单词的长度,单词以空格隔开。

描述 计算字符串最后一个单词的长度,单词以空格隔开。 知识点 字符串,循环 运行时间限制 0M 内存限制 0 输入 一行字符串,长度小于128。 输出 整数N,最后一个单词的...
  • qqyuanhao163
  • qqyuanhao163
  • 2015-08-27 23:59
  • 3672
    个人资料
    • 访问:890119次
    • 积分:12917
    • 等级:
    • 排名:第1263名
    • 原创:423篇
    • 转载:64篇
    • 译文:54篇
    • 评论:102条
    博客专栏
    最新评论