Flink DataSet API (三)Data Sinks

flink在批处理中常见的sink

1.基于本地集合的sink(Collection-based-sink)

2.基于文件的sink(File-based-sink)

基于本地集合的sink(Collection-based-sink)

    import org.apache.flink.api.scala.extensions._
    import org.apache.flink.api.scala._
    import org.apache.flink.streaming.api.scala.extensions._

    //初始化执行环境
    val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment

    //2.定义数据 stu(age,name,height)
    val stu: DataSet[(Int, String, Double)] = env.fromElements(
      (19, "zhangsan", 178.8),
      (17, "lisi", 168.8),
      (18, "wangwu", 184.8),
      (21, "zhaoliu", 164.8)
    )
    //3.TODO sink到标准输出
    stu.print

    //3.TODO sink到标准error输出
    stu.printToErr()

    //4.TODO sink到本地Collection
    print(stu.collect())

基于文件的sink(File-based-sink)

flink支持多种存储设备上的文件,包括本地文件,hdfs文件等。

flink支持多种文件的存储格式,包括text文件,CSV文件等。

Ø writeAsText():TextOuputFormat - 将元素作为字符串写入行。字符串是通过调用每个元素的toString()方法获得的。

注意:不论是本地还是hdfs.若Parallelism>1将把path当成目录名称,若Parallelism=1将把path当成文件名。

1、将数据写入本地文件

    import org.apache.flink.api.scala.extensions._
    import org.apache.flink.api.scala._
    import org.apache.flink.streaming.api.scala.extensions._



    //0.注意:不论是本地还是hdfs.若Parallelism>1将把path当成目录名称,若Parallelism=1将把path当成文件名。
    val env = ExecutionEnvironment.getExecutionEnvironment
    val ds1: DataSet[(Int, String)] = env.fromCollection(Map(1 -> "spark", 2 -> "flink"))
    //1.TODO 写入到本地,文本文档,NO_OVERWRITE模式下如果文件已经存在,则报错,OVERWRITE模式下如果文件已经存在,则覆盖
    ds1.setParallelism(1).writeAsText("data/ds/", WriteMode.OVERWRITE)
    env.execute()

2、将数据写入HDFS

    //TODO writeAsText将数据写入HDFS
    val env = ExecutionEnvironment.getExecutionEnvironment
    val ds1: DataSet[Map[Int, String]] = env.fromElements(Map(1 -> "spark" , 2 -> "flink"))
    ds1.setParallelism(1).writeAsText("hdfs://hadoop01:9000/a", WriteMode.OVERWRITE)
    env.execute()

可以使用sortPartition对数据进行排序后再sink到外部系统。

    import org.apache.flink.api.scala.extensions._
    import org.apache.flink.api.scala._
    import org.apache.flink.streaming.api.scala.extensions._

    //TODO 使用sortPartition对数据进行排序后再sink到外部系统
    val env = ExecutionEnvironment.getExecutionEnvironment
    //stu(age,name,height)
    val stu: DataSet[(Int, String, Double)] = env.fromElements(
      (19, "zhangsan", 178.8),
      (17, "lisi", 168.8),
      (18, "wangwu", 184.8),
      (21, "zhaoliu", 164.8)
    )
    //1.以age从小到大升序排列(0->9)
    stu.sortPartition(0, Order.ASCENDING).print
    //2.以name从大到小降序排列(z->a)
    stu.sortPartition(1, Order.ASCENDING).print
    //3.以age升序,height降序排列
    stu.sortPartition(0, Order.ASCENDING).sortPartition(2, Order.DESCENDING).print
    //4.所有字段升序排列
    stu.sortPartition("_", Order.ASCENDING).print
    import org.apache.flink.api.scala.extensions._
    import org.apache.flink.api.scala._
    import org.apache.flink.streaming.api.scala.extensions._

    val env = ExecutionEnvironment.getExecutionEnvironment
    //5.1准备数据
    case class Student(name: String, age: Int)
    val ds1: DataSet[(Student, Double)] = env.fromElements(
      (Student("zhangsan", 18), 178.5),
      (Student("lisi", 19), 176.5),
      (Student("wangwu", 17), 168.5)
    )
    val ds2 = ds1.sortPartition("_1.age", Order.ASCENDING).setParallelism(1)
//    val ds2 = ds1.sortPartition(_._1.age, Order.ASCENDING).setParallelism(1) //和上面语句相同含义

    //5.2写入到hdfs,文本文档
    val outPath1="hdfs://hadoop01:9000/Student001.txt"
    ds2.writeAsText(outPath1, WriteMode.OVERWRITE)
    env.execute()
    //5.3写入到hdfs,CSV文档
    val outPath2="hdfs://hadoop01:9000/Student002.csv"
    ds2.writeAsCsv(outPath2, "\n", "|||",WriteMode.OVERWRITE)
    env.execute()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用中提到的DataSet是指Flink中的数据集,它是Flink中的一种数据结构,用于表示并处理大规模的数据集。FlinkDataSet API提供了一套丰富的操作符,可以对数据集进行转换、过滤、聚合等各种操作。 引用中的newRanks是指在迭代计算中,根据输入的邻接表和当前的排名值进行计算得到的新的排名值的数据集。在图计算中,通常会使用迭代算法来计算各个节点的排名值,每次迭代都会根据当前的排名值和邻接表进行计算,得到新的排名值。 引用中的result是指通过在两个数据集上进行连接操作后得到的结果数据集。在Flink中,可以使用join操作符将两个数据集按照指定的键进行连接,生成一个包含两个数据集中共有键的结果数据集。 因此,FlinkDataSet是用于表示和处理大规模数据集的数据结构,可以通过各种操作符对数据集进行转换和处理。在图计算中,可以使用DataSet进行迭代计算,并使用join操作符进行数据集之间的连接操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [flink dataset join笔记](https://blog.csdn.net/weixin_30391889/article/details/114753509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值