zoukankan      html  css  js  c++  java
  • 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 sparkSession = SparkSession.builder() .config(conf) .config("spark.sql.warehouse.dir", warehouseLocation) //设置warehouse .getOrCreate() val sc = sparkSession.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") sparkSession.udf.register("StrLen", new UDF(),DataTypes.IntegerType) sparkSession.sql("select name, StrLen(name) as length from user").show() sparkSession.stop() } }

    结果

  • 相关阅读:
    IDEA右键新建时没有Java Class选项
    捕获摄像头视频VC
    重叠IO与IOCP
    (八)内存管理与内存分配
    DebugView使用详解
    (六) 中断机制
    (五) proc文件系统
    bash 之备份文件
    bash 遍历目录文件
    (四) linux内核模块编程
  • 原文地址:https://www.cnblogs.com/144823836yj/p/10768888.html
Copyright © 2011-2022 走看看