Flink读取一个文件或者一个集合的简单demo

本文介绍了如何使用Apache Flink在Scala中从HDFS读取日志数据流,并演示了如何打印数据流的基本操作,展示了实时流处理的基础用法。
import org.apache.flink.streaming.api.scala._

case class Userinfos(userid:Int,username:String)
object First {
  def main(args: Array[String]): Unit = {
    //获取一个execution environment执行环境
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    //创建数据流 stream sources,可以是文件,也可以是一个集合
    val ds = env.readTextFile("hdfs://192.168.181.132:9000/logs/20210321/log.1616340226374")
//    val ds = env.readTextFile("d:/log_2020-01-01.log")
	
//    val ds = env.fromCollection(
//      List(
//        Userinfos(1, "zs"),
//        Userinfos(2, "ls"),
//        Userinfos(3, "ww"),
//        Userinfos(4, "zl"),
//        Userinfos(5, "sq")
//      )
//    )
    //指定数据集的操作
    ds.print()
    //触发程序执行
    env.execute("mytest")
  }
}

在Java中使用Apache Flink进行数据流处理时,通常会涉及到创建执行环境、定义数据源、应用转换操作以及定义输出接收器等步骤。下面是一个简单的WordCount示例代码,它展示了如何使用Flink的DataStream API来统计文本中的单词出现次数。 ```java import org.apache.flink.api.common.functions.FlatMapFunction; import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.util.Collector; public class WordCount { public static void main(String[] args) throws Exception { // 创建执行环境 final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 定义数据源(这里使用的是从网络套接字读取) DataStream<String> text = env.socketTextStream("localhost", 9999); // 数据转换操作:分割句子为单词,并计数 DataStream<Tuple2<String, Integer>> counts = text.flatMap(new Tokenizer()) .keyBy(value -> value.f0) .sum(1); // 定义输出接收器(这里将结果打印到控制台) counts.print(); // 触发程序执行 env.execute("Java WordCount Example"); } public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> { @Override public void flatMap(String value, Collector<Tuple2<String, Integer>> out) { // 分割行成单词 String[] tokens = value.toLowerCase().split("\\W+"); // 输出二元组(word, 1) for (String token : tokens) { if (token.length() > 0) { out.collect(new Tuple2<>(token, 1)); } } } } } ``` 此代码片段提供了一个基本的工作流程,其中包括了设置执行环境、创建数据流、对数据进行转换处理以及最后执行作业。在这个例子中,`socketTextStream` 方法用于从本地主机的一个端口读取数据流,这需要一个运行中的服务器来发送数据给这个端口[^1]。 对于演示项目,你可以参考GitHub上的开源项目,比如那些由Apache Flink社区提供的示例集合,它们可以帮助你更深入地了解Flink的功能和如何构建复杂的应用程序[^3]。 如果你想要获取更多关于Flink的Java实战项目或者示例代码,可以查找专门针对Flink的学习资源,这些资源通常包含详细的教程和完整的项目结构,能够帮助你更好地理解和实践Flink的核心概念和技术细节[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值