SparkSQL自定义UDF函数实现对日志文件的修改

日志文件数据格式:

这里我们发现每条信息都有“”冒号的包裹,不利于我们分析,所以我们要对其进行简单的清洗去除冒号

UDF函数是对数据进行一进一出的操作,所以自定义UDF函数来实现

代码:

object Test02 {

    def main(args: Array[String]): Unit = {

        // spark配置文件
        val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("test02")

        // sparkSQL的运行环境
        val spark: SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()

        // 使用sparkSQL读取log文件,可以将它当做text文件读取
        val df: DataFrame = spark.read.text("datas/moodle.zhiyou100.access.log")

        // 查看spark内核对文件数据的解析,这里只是看做一个string字符串
        df.printSchema()

        // 自定义UDF函数,UDF函数实现的是一对一数据操作,所以这里可以定义实现去除日志中的“
        spark.udf.register("delet",(x:String) => x.replace("\"",""))

        // 必须创建临时表才能使用sparkSQL
        df.createOrReplaceTempView("log")

        // 使用sparksql进行查询数据
        val value: DataFrame = spark.sql("select delet(*) from log")

        // 这里指定查看5条,并且允许显示全部(默认TRUE会将较长的数据不显示完全)
        value.show(5,false)

        // 将修改后的数据导出保存
        value.write.text("out1")

        spark.close()
    }

}

结果:

 这里保存的格式就是TXT格式了

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用自定义UDF函数的方式实现Hive中的CAST函数,需要按照以下步骤进行操作: 1. 创建一个自定义UDF函数类,该类需要继承Hive中的GenericUDF或者AbstractGenericUDF类。具体而言,如果你需要处理单个参数,则可以继承GenericUDF类,如果需要处理多个参数,则可以继承AbstractGenericUDF类。 2. 在类中实现evaluate()方法,该方法用于实现CAST函数的逻辑。该方法需要接收参数,并返回转换后的值。在方法中,你需要编写实现将传入参数转换成指定类型的代码。具体而言,你可以使用Java中的类型转换操作或者其他相关的转换函数来完成这个过程。 3. 将该类编译打包成jar文件,并上传到Hive的classpath中。 4. 在Hive中注册该自定义UDF函数。具体而言,你需要使用CREATE FUNCTION语句来创建该函数,并指定函数的名称、参数类型、返回类型等信息。例如,以下是一个示例代码: ``` CREATE FUNCTION my_cast AS 'com.example.MyCastUDF' USING JAR 'path/to/my-cast-udf.jar'; ``` 5. 在Hive中使用该自定义UDF函数。具体而言,你需要在SELECT语句中调用该函数,并将需要转换的参数作为函数的参数传入。例如,以下是一个示例代码: ``` SELECT my_cast(column_name AS target_type) FROM table_name; ``` 注意,这里的column_name是需要转换的列名,target_type是需要转换成的目标类型。你需要根据具体的情况进行修改
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值