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(...)