Spark SQL UDF示例

Posted 144823836yj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark SQL UDF示例相关的知识,希望对你有一定的参考价值。

UDF即用户自定函数,注册之后,在sql语句中使用。

基于scala-sdk-2.10.7,Spark2.0.0。

package UDF_UDAF

import java.util

import org.apache.spark.sql.{RowFactory, SparkSession}
import org.apache.spark.SparkConf
import org.apache.spark.sql.api.java.UDF1
import org.apache.spark.sql.types.{DataTypes, StructField}

// 自定义一个继承自 UDF1(或UDF2,UDF3,UDF4...)的类
class UDF extends UDF1[String,Int]{ override def call(t1: String): Int = { t1.length } } object UDF{ def main(args: Array[String]): Unit = { val warehouseLocation = "/code/VersionTest/spark-warehouse" //必须是相对路径 val conf = new SparkConf().setMaster("local").setAppName("udf") val sqlSession = SparkSession.builder() .config(conf) .config("spark.sql.warehouse.dir", warehouseLocation) //设置warehouse .getOrCreate() val sc = sqlSession.sparkContext val parallize = sc.parallelize(Array("zhangsan","lisi","wangwu")) val rowRDD = parallize.map(s=>RowFactory.create(s)) val fields = new util.ArrayList[StructField]() fields.add(DataTypes.createStructField("name",DataTypes.StringType,true)) val schema = DataTypes.createStructType(fields) val df = sqlSession.createDataFrame(rowRDD, schema) df.createOrReplaceTempView("user") sqlSession.udf.register("StrLen", new UDF(),DataTypes.IntegerType) sqlSession.sql("select name, StrLen(name) as length from user").show() sc.stop() } }

结果

技术图片

 

以上是关于Spark SQL UDF示例的主要内容,如果未能解决你的问题,请参考以下文章

使用 scala 在 spark sql 中编写 UDF

在Apache Spark中使用UDF

Spark(Hive) SQL中UDF的使用(Python)

在 spark 数据框中运行 UDF 时,不支持获取 org.apache.spark.sql.Column 类型的架构

带有 Pandas 矢量化 UDF 的 Spark 3

如何在 Spark SQL 中将额外参数传递给 UDF?