Spark1.6 SQL下的UDF--SplitCount(切分字符串并计算数组长度)

本文介绍如何在Spark 1.X版本中使用用户自定义函数(UDF),通过一个具体案例展示了如何将自定义函数注册到Spark SQL上下文中,并应用于数据处理。案例中,我们创建了一个函数用于计算字符串中逗号分隔的元素数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UDF(用户自定义函数):将自己写的函数加入到用户 会话,和内置函数一样使用

注意本案例适合spark1.X版的,spark2.x的版本不适用。

=====================================================================================

package com.victor.spark.sqlUDF

import org.apache.spark.sql.{SQLContext, SparkSession}
import org.apache.spark.{SparkConf, SparkContext}

/**
  * Company: Huazhong University of science and technology
  * 华中科技大学电气学院聚变与等离子体研究所
  * Version: V1.0
  * Author: Victor
  * Contact: 1650996069@qq.com  2018--2020
  * Software: IntelliJ IDEA
  * File: HobbyCount
  * Time: 2018/10/26 17:53
  * Desc:将字符串以“,”切分,然后求切分后数组的长度。
  **/


//继承App,免去写main方法
object HobbyCount extends App{
  //设置Spark运行时的配置参数,setAppName()设置应用程序的名字
  //setMaster("local[*]")  设置Spark在本地多线程运行
  val conf = new SparkConf().setAppName("UDFHobbyCount").setMaster("local[*]")

  //建立Spark上下文,这是通向Spark集群的唯一入口
  val sc = new SparkContext(conf)

  //建立基于Spark上下文的SQL上下文
  val sqlContext = new SparkSession().sqlContext(sc)

  //如果不导入,后面的toDF()会出错
  //import org.apache.spark.sql.SQLContext.implicits._

  case class NameHobbies(name:String,hobbies:String)
  val data = Seq(NameHobbies("yexin","jog,code,python,java"),NameHobbies("wuyanqing","R language,C++"))

  //加载数据注册为表,名字为:NameHobbiesTable
  sc.parallelize(data).toDF().registerTempleTable("NameHobbieTable")

  //注册名字为hobby_count的自定义函数:将字符串以“,”切分,然后求切分后数组的长度。
  sqlContext.udf.register("hobby_count",(s:String)=>s.split(',').size)

  //执行查询操作,打印结果
  sqlContext.sql("select *,hobby_count(hobbies) as hobby_count from NameHobbieTable").show()

  //执行清理操作,清除中间数据,停止Spark上下文
  sc.stop()
  
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值