Java 在apache spark中读取大量文件的最佳实践

Java 在apache spark中读取大量文件的最佳实践,java,apache-spark,Java,Apache Spark,我想处理大量的.DAT文件,这些文件包含电气设备每秒的测量值(每行代表一秒) 我有5000多个文件,每个文件大约160 KiB(实际上没有那么多),但我发现很难找到一种有效或推荐的方法来处理此类问题:创建一个对象,对每个文件内容进行汇总 这是我的文件结构: feeder/ CT40CA18_20190101_000000_60P_40000258.DAT CT40CA18_20190101_010000_60P_40000258.DAT CT40CA18_20190

我想处理大量的
.DAT
文件,这些文件包含电气设备每秒的测量值(每行代表一秒)

我有5000多个文件,每个文件大约160 KiB(实际上没有那么多),但我发现很难找到一种有效或推荐的方法来处理此类问题:创建一个对象,对每个文件内容进行汇总

这是我的文件结构:

feeder/
     CT40CA18_20190101_000000_60P_40000258.DAT
     CT40CA18_20190101_010000_60P_40000258.DAT
     CT40CA18_20190101_020000_60P_40000258.DAT
     CT40CA18_20190101_030000_60P_40000258.DAT
     CT40CA18_20190101_040000_60P_40000258.DAT
     ....
     ....
     ....
     CT40CA18_20190812_010000_60P_40000258.DAT
我目前在Java Spark(2.1.1版本)中的代码是:

FeederFile

package model;

import java.io.Serializable;

public class FeederFile implements Serializable {

    private String content;

    public FeederFile() {}

    public void setContent(String content) {
        this.content = content;
    }

    public String getContent() {
        return content;
    }

    public FeederFile withContent(final String content) {
        this.content = content;
        return this;
    }
}
问题在于,当map调用
call
时,传递的字符串表示
.DAT
文件的一行。因此,存在大量不必要的
FeederFile
对象创建。另一个问题是
textFile
不区分不同的文件,因此所有文件都被附加到同一个对象(即,所有文件的内容都在
FeederFile
类的属性
content
中)

我用这种简单的方法来检索所有内容(我不想要所有的内容本身,而是创建一种对象来总结
.DAT
文件的信息,比如行数和一些基于数据的统计信息)

你们中有没有人想到如何根据
.DAT
创建一个
FeederFile

提前感谢您提供的任何帮助。

您可以使用:

sparkContext.wholeTextFiles(...)
SparkContext的全文文件方法,即中的sc.wholeTextFiles sparkshell,创建一个PairRDD,其中键是文件名,带有 路径这是一条完整的道路,就像 “hdfs://aa1/data/src_data/stage/test_files/collection_vk/current_snapshot/*”. 该值是字符串中文件的全部内容


我可以通过使用
SparkSession
类多少利用这个方法吗?
SparkSession.sparkContext
package model;

import java.io.Serializable;

public class FeederFile implements Serializable {

    private String content;

    public FeederFile() {}

    public void setContent(String content) {
        this.content = content;
    }

    public String getContent() {
        return content;
    }

    public FeederFile withContent(final String content) {
        this.content = content;
        return this;
    }
}
sparkContext.wholeTextFiles(...)