(三)Scala从入门到项目实战(Flink、Spark、Kafka)——Scala方法和函数

本文深入探讨Scala中的方法和函数,涵盖方法定义、递归、默认参数、可变参数、嵌套、匿名函数、偏应用函数、高阶函数及其各种形式,如参数和返回为函数的情况,结合Flink、Spark、Kafka项目实战,帮助读者掌握Scala编程精髓。
摘要由CSDN通过智能技术生成

目录

方法和函数

方法的定义

递归方法

方法的默认参数

可变参数的方法

嵌套方法

匿名函数

偏应用函数

高阶函数

方法的参数是函数

方法的返回是函数

方法的参数和返回都是函数

柯里化函数


方法和函数

说明:在Scala中既有方法也有函数,大多数情况下,他们没有区别,作为初学者暂时不用明确区分。一般情况下方法的类型为具体一个返回值类型,可以省略不写。而函数的类型为:参数类型 => 返回值类型 ,也可以省略不写,在后边的代码中会体现这个特点。

 

方法的定义

    def max(a:Int,b:Int):Int={

      if(a>b) return a else return b

    }

    println(max(1, 3))

 

                     

  1. 方法用def来定义
  2. 方法体中最后的返回值可以使用return,如果使用了return,那么方法体的返回值类型一定要定义
  3. 如果方法体中没有return,默认将方法体中的最后一行计算的结果当做返回值返回,方法体的返回值类型可以省略(自动推断)
  4. 定义方法传入的参数一定要指定类型
  5. 如果方法体为一行代码,方法的定义也可以简写

比如:

    def max(a: Int, b: Int): Int = if (a > b) return a else return b
  • 如果定义的方法没有返回值(Unit)也可以省略方法名称和方法体之间的“=”,要注意,省略了等号,不管有没有返回值都不会反回任何内容。

递归方法

定义方法递归调用时必须显示的定义出函数返回值,否则其无法推断,不能通过编译

  def fun(num: Int): Int = {

    if (num == 1) 1 else num * fun(num - 1)

  }

 

方法的默认参数

Scala支持定义方法时对参数设置默认值。调用时输入参数则使用输入的参数,空参则使用默认值

  def sum(a: Int = 10, b: Int = 20) = {

    a + b

  }

  println(sum())//空参

  println(sum(100,200))//覆盖

  
首先,你需要在 Scala 代码中引入以下依赖: ```scala libraryDependencies += "org.apache.flink" %% "flink-scala" % flinkVersion libraryDependencies += "org.apache.flink" %% "flink-streaming-scala" % flinkVersion libraryDependencies += "org.apache.flink" %% "flink-connector-kafka" % flinkVersion libraryDependencies += "org.apache.flink" %% "flink-connector-hive" % flinkVersion libraryDependencies += "org.apache.flink" %% "flink-connector-jdbc" % flinkVersion ``` 然后,你可以使用以下代码来消费 Kafka 数据: ```scala import org.apache.flink.streaming.api.scala._ import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer val env = StreamExecutionEnvironment.getExecutionEnvironment val kafkaConsumer = new FlinkKafkaConsumer[String]("topic", new SimpleStringSchema(), properties) val stream = env.addSource(kafkaConsumer) // 对数据进行处理 val result = stream.map(...) ``` 其中,`properties` 是一个 `Properties` 对象,用于配置 Kafka 的连接信息。 接下来,你需要将处理后的数据写入到 Hive Doris 中。可以使用以下代码: ```scala import org.apache.flink.table.api.bridge.scala._ import org.apache.flink.table.catalog.hive.HiveCatalog import org.apache.flink.streaming.api.scala.StreamTableEnvironment val tableEnv = StreamTableEnvironment.create(env) val hiveCatalog = new HiveCatalog("myHiveCatalog", "myDatabase", "/path/to/hive/conf", "2.3.4") tableEnv.registerCatalog("myHiveCatalog", hiveCatalog) tableEnv.useCatalog("myHiveCatalog") tableEnv.executeSql("CREATE TABLE myHiveTable (...) WITH (...)") result.toTable(tableEnv, "myResultTable") tableEnv.executeSql("INSERT INTO myHiveTable SELECT * FROM myResultTable") val jdbcUrl = "jdbc:mysql://localhost:3306/my_database" tableEnv.executeSql(s"CREATE TABLE myDorisTable (...) WITH (...)") tableEnv.executeSql(s"INSERT INTO myDorisTable SELECT * FROM myResultTable") ``` 其中,`myHiveCatalog` 是 Hive 的 Catalog 名称,`myDatabase` 是 Hive 中的数据库名称,`/path/to/hive/conf` 是 Hive 的配置文件所在路径,`2.3.4` 是 Hive 的版本号。 `myHiveTable` `myDorisTable` 是你要写入数据的表名,`(...)` 是表的列定义其他属性,`myResultTable` 是处理后的数据表名。 `jdbcUrl` 是 Doris 数据库的连接信息,你需要根据实际情况进行修改。 你需要将上述代码中的 `...` 替换为实际的处理逻辑表定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值