Flink读取文件数据的两种方式

概述:Flink数据源(Data Sources)可以来自Java collections,也可以来自文件。本文主要介绍分别使用Scala和Java从CSV、Text中读取数据的方法,更详细信息可以参阅官方文档。

(1)Scala方式

/**
    * map算子
    *
    * @param env
    */
def mapFunction(env: ExecutionEnvironment): Unit = {
    import org.apache.flink.api.scala._
    val data = env.fromCollection(List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
    //    data.map((x:Int)=>x+1).print()
    //    data.map((x)=>x+1).print()
    //    data.map(x=>x+1).print()
    data.map(_ + 1).filter(_ > 5).print()
}
​
/**
    * 读取压缩文件
    *
    * @param env
    */
def readCompressionFiles(env: ExecutionEnvironment): Unit = {
    val filePath = "E:\\compression"
    env.readTextFile(filePath).print()
}
​
/**
    * 读取嵌套文件
    *
    * @param env
    */
def readRecursiveFiles(env: ExecutionEnvironment): Unit = {
    val filePath = "E:\\nested"
    val parameters = new Configuration
    parameters.setBoolean("recursive.file.enumeration", true)
    env.readTextFile(filePath).withParameters(parameters).print()
}
​
/**
    * 从集合中获取数据
    *
    * @param env
    */
def fromCollection(env: ExecutionEnvironment): Unit = {
    import org.apache.flink.api.scala._
    val data = 1 to 10
    env.fromCollection(data).print()
}
​
/**
    * 从Text中读取数据
    *
    * @param env
    */
def textFile(env: ExecutionEnvironment): Unit = {
    //    val filePath="E:\\temp\\people.txt"
    val filePath = "E:\\temp"
    env.readTextFile(filePath).print()
}
​
/**
    * 从csv中读取数据 使用自定义类方式
    * id,peopleName,phone,email
    *
    * @param env
    */
def csvFile(env: ExecutionEnvironment): Unit = {
    import org.apache.flink.api.scala._
    val filePath = "E:\\temp\\people.csv"
    //    env.readCsvFile[(Int,String,String,String)](filePath,ignoreFirstLine = true).print()
    //        env.readCsvFile[(Int,String)](filePath,ignoreFirstLine = true,includedFields =Array(0,3)).print()
    case class PeopleCsvClass(phone: String, email: String)
    //    env.readCsvFile[PeopleCsvClass](filePath,ignoreFirstLine=true,includedFields = Array(2,3)).print()
    env.readCsvFile[PeopleCsvClass](filePath, ignoreFirstLine = true, pojoFields = Array("phone", "email")).print()
}

(2)Java方式

 public static void mapFunction(ExecutionEnvironment env) throws Exception {
        List list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            list.add(i);
        }
        DataSource data = env.fromCollection(list);
        data.map(new MapFunction() {
            @Override
            public Integer map(Integer input) throws Exception {
                return input + 1;
            }
        }).print();
    }
​
    public static void readRecursive(ExecutionEnvironment env) throws Exception {
        String filePath = "E:\\nested";
        Configuration parameters = new Configuration();
        parameters.setBoolean("recursive.file.enumeration", true);
        env.readTextFile(filePath).withParameters(parameters).print();
    }
​
    public static void formCollection(ExecutionEnvironment env) throws Exception {
        List list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            list.add(i);
        }
        env.fromCollection(list).print();
    }
​
    public static void textFile(ExecutionEnvironment env) throws Exception {
        String filePath = "E:\\temp\\people.txt";
        env.readTextFile(filePath).print();
        System.out.println("---------------------------------------");
        filePath = "E:\\temp";
        env.readTextFile(filePath).print();
    }
​
    public static void csvFile(ExecutionEnvironment env) throws Exception {
        String filePath = "E:\\temp\\people.csv";
        env.readCsvFile(filePath).pojoType(People.class, "id", "peopleName", "phone", "email").print();
    }

 

你可能感兴趣的:(Flink读取文件数据的两种方式)