package big.data.analyse.udfudaf

 import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}
 import org.apache.spark.sql.{Row, SparkSession}

 /**
   * Created by zhen on 2018/11/25.
   */
 object SparkUdfUdaf {
   def isAdult(age : Int) ={
     if(age > 18){
       true
     }else{
       false
     }
   }
   def main(args: Array[String]) {
     val spark = SparkSession
       .builder()
       .appName("UdfUdaf")
       .master("local[2]")
       .getOrCreate()
     val userData = Array(
       "2015,11,www.baidu.com",
       "2016,14,www.google.com",
       "2017,13,www.apache.com",
       "2015,21,www.spark.com",
       "2016,32,www.hadoop.com",
       "2017,18,www.solr.com",
       "2017,14,www.hive.com"
     )
     val sc = spark.sparkContext
     val sqlContext = spark.sqlContext
     val userDataRDD = sc.parallelize(userData) // 转化为RDD
     val userDataType = userDataRDD.map(line => {
         val Array(age, id, url) = line.split(",")
         Row(
           age, id.toInt, url
         )
       })
     val structTypes = StructType(Array(
       StructField("age", StringType, true),
       StructField("id", IntegerType, true),
       StructField("url", StringType, true)
     ))
     // RDD转化为DataFrame
     val userDataFrame = sqlContext.createDataFrame(userDataType,structTypes)
     // 注冊临时表
     userDataFrame.createOrReplaceTempView("udf")
     // 注册udf(方式一)
     spark.udf.register("getLength", (str : String) => str.length)
     // 注册udf(方式二)
     spark.udf.register("isAdult", isAdult _)
     //执行sql
     val sql = "select * from udf where getLength(udf.url)=13 and isAdult(udf.id)"
     val result = sqlContext.sql(sql)
     result.foreach(println(_))
   }
 }

结果:

Spark之UDF的更多相关文章

  1. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十五)Spark编写UDF、UDAF、Agg函数

    Spark Sql提供了丰富的内置函数让开发者来使用,但实际开发业务场景可能很复杂,内置函数不能够满足业务需求,因此spark sql提供了可扩展的内置函数. UDF:是普通函数,输入一个或多个参数, ...

  2. 转】 Spark SQL UDF使用

    原博文出自于: http://blog.csdn.net/oopsoom/article/details/39401391 感谢! Spark1.1推出了Uer Define Function功能,用 ...

  3. spark编写UDF和UDAF

    UDF: 一.编写udf类,在其中定义udf函数 package spark._sql.UDF import org.apache.spark.sql.functions._ /** * AUTHOR ...

  4. Spark SQL UDF示例

    UDF即用户自定函数,注册之后,在sql语句中使用. 基于scala-sdk-2.10.7,Spark2.0.0. package UDF_UDAF import java.util import o ...

  5. spark使用udf给dataFrame新增列

    在 spark 中给 dataframe 增加一列的方法一般使用 withColumn // 新建一个dataFrame val sparkconf = new SparkConf() .setMas ...

  6. Spark注册UDF函数,用于DataFrame DSL or SQL

    import org.apache.spark.sql.SparkSession import org.apache.spark.sql.functions._ object Test2 { def ...

  7. Pyspark 使用 Spark Udf 的一些经验

    起初开始写一些 udf 的时候感觉有一些奇怪,在 spark 的计算中,一般通过转换(Transformation) 在不触发计算(Action) 的情况下就行一些预处理.udf 就是这样一个好用的东 ...

  8. Spark笔记之使用UDF(User Define Function)

    一.UDF介绍 UDF(User Define Function),即用户自定义函数,Spark的官方文档中没有对UDF做过多介绍,猜想可能是认为比较简单吧. 几乎所有sql数据库的实现都为用户提供了 ...

  9. 王家林 大数据Spark超经典视频链接全集[转]

    压缩过的大数据Spark蘑菇云行动前置课程视频百度云分享链接 链接:http://pan.baidu.com/s/1cFqjQu SCALA专辑 Scala深入浅出经典视频 链接:http://pan ...

随机推荐

  1. 使用 Kubeadm 升级 Kubernetes 版本

    升级最新版 kubelet kubeadm kubectl (阿里云镜像) cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kuberne ...

  2. Android--UI之ListView

    前言 今天讲解一下Android平台下ListView控件的开发,在本篇博客中,将介绍ListView的一些常用属性.方法及事件,还会讲解ListView在开发中常用的几种方式,以及使用不通用的适配器 ...

  3. Android--UI之Radio、Check、Toggle

    前言 这篇博客讲解一下Android平台下,RadioButton.CheckBox以及ToggleButton三个控件的用法,因为这三个控件之中都存在一个选中或是没选中的状态,所以放在一起讲解. 这 ...

  4. ZOJ Problem Set - 2397 Tian Ji -- The Horse Racing

    #include<iostream> #include<cmath> #include<algorithm> #define REP(i,n) for(int i= ...

  5. Deeplearning.ai课程笔记--汇总

    从接触机器学习就了解到Andrew Ng的机器学习课程,后来发现又出来深度学习课程,就开始在网易云课堂上学习deeplearning.ai的课程,Andrew 的课真是的把深入浅出.当然学习这些课程还 ...

  6. 使用minukube部署kubernetes admission webhook实现etcd pod安全删除

    本需求来自于一道面试题

  7. Linux查询端口是否被占用的四种方法

    一个面试题,使用三种不同的方法查看8080被哪个进程占用了.通常比较熟悉的方法是netstat和lsof两种,但还有什么方法呢. 1.netstat或ss命令 netstat -anlp | grep ...

  8. MVC学习之路【小补充】

    1]:在js中使用ViewBag  需要添加“”,否则程序报错,无法正常运行 .例如:正确格式 var ss = "@ViewBag.ts"

  9. JAVA实现ATM源代码及感想

    源代码 //20173626 信1705-2 郑锦package ATM;import java.io.IOException;import java.io.File;import java.io.F ...

  10. does not support SSL connections

    语言:C# 开发工具:Visual Studio 2017 问题场景介绍: nuget引用的MySql.Data版本是6.10.5,MySQL的数据库连接串如下: Server=xxx;Databas ...