有没有办法从位于本地文件系统的多个不同的txt(或二进制)文件创建一个RDD?
我有5个工人。每个工作程序都包含文件file:///tmp/names.txt
,但每个工作程序的names.txt
不同。我需要创建包含所有工作者的所有名称的RDD。我的代码:
public class Main {
public static void main(String[] args) {
String namesFilePath = "file:///tmp/names.txt";
SparkSession spark = SparkSession.builder().appName("Simple Application").getOrCreate();
Dataset<String> names = spark.read().textFile(namesFilePath).cache();
// PROBLEM: return only names from one of the workers!
System.out.println("All names: " + names.collectAsList());
spark.stop();
}
}
答案 0 :(得分:2)
TL; DR 也许,但你真的不想这样做。
有可能破解像preferredLocations
这样的低级工具来创建虚拟RDD
并直接在任务中加载数据,但它显然是针对Spark架构而不是使用内置读卡器。
它还会假设缺少故障,这在部署方案中是正确的假设,其中使用Spark的应用程序有限。
基本上你会交换大部分使Spark有用的东西:
并且在没有框架本身任何帮助的情况下留下了微观管理和高度防御性编程(preferredLocations
正是这样,首选无法保证)。