自定义spark udf计算单词的长度
2016-05-30 19:53
435 查看
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| +---+ */
以上测试已经通过,可以根据自己需要做修改!如有不足之处,请各位批评指正!
相关文章推荐
- 信息论小结
- Easy-题目10:217. Contains Duplicate
- 优酷视频解析(16.5.30更新)Java代码版本
- Mybatis 入门之resultMap与resultType讲解实例
- Easy-题目9:171. Excel Sheet Column Number
- service全面解析(一)
- java5.30学习笔记
- POJ2488【DFS】
- Easy-题目8:242. Valid Anagram
- 【Mysql性能优化四】数据表的设计和读写分离技术
- Acticity的四种启动模式解析
- BZOJ 1502 月下柠檬树(simpson积分)
- 自定义圆形图
- spark sql版本的单词统计代码
- 第十二周项目4:数组类
- <crtdbg.h> 的作用
- <crtdbg.h> 的作用
- JSESSIONID与SESSION
- JSESSIONID与SESSION
- 手写一个SqlHelper