Spark:来自多个不同本地文件的RDD

时间:2018-02-12 12:19:27

标签: java apache-spark

有没有办法从位于本地文件系统的多个不同的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();
    }
}

1 个答案:

答案 0 :(得分:2)

TL; DR 也许,但你真的不想这样做。

有可能破解像preferredLocations这样的低级工具来创建虚拟RDD并直接在任务中加载数据,但它显然是针对Spark架构而不是使用内置读卡器。

它还会假设缺少故障,这在部署方案中是正确的假设,其中使用Spark的应用程序有限。

基本上你会交换大部分使Spark有用的东西:

  • 弹性
  • 能够以最少的用户干预进行扩展。
  • 透明计算模型。
  • 能够以具有成本效益的方式利用资源。

并且在没有框架本身任何帮助的情况下留下了微观管理和高度防御性编程(preferredLocations正是这样,首选无法保证)。