Я хочу добавить имя файла к каждой строке при вставке в БД. Получение папки в качестве ввода.
Загрузка папки с использованием textFile(...)
метод:
public JavaRDD<Row> readFolder(String filePath) {
JavaRDD<String> logRDD = sparkContext.textFile(filePath, 1).toJavaRDD();
RegexMatch reg = new RegexMatch();
JavaRDD<Row> rowRDD = logRDD
.map((Function<String, Row>) line -> {
String[] sp = line.split(" ");
// want to add file name to Row, how to get it ?
return RowFactory.create(sp[1], sp[3], sp[2]);
});
rowRDD.persist(StorageLevel.MEMORY_ONLY());
return rowRDD;
}
Изменил этот код на wholeTextFiles(...)
, получив здесь имя файла, но не уверен, как получить строку из него, как в коде выше?
public void readFolder(String filePath) {
JavaSparkContext javaSparkContext = new JavaSparkContext(sparkContext);
JavaPairRDD<String, String> fileNameContentsRDD = javaSparkContext.wholeTextFiles(filePath, 1);
JavaRDD<String> lineCounts = fileNameContentsRDD.map((Function<Tuple2<String, String>, String>) fileNameContent -> {
String content = fileNameContent._2();
int numLines = content.split("[\r\n]+").length;
return fileNameContent._1() + ": " + numLines;
});
List<String> output = lineCounts.collect();
System.out.println(output);
}
Пожалуйста, предложите.