Spark处理非结构化文件

时间:2017-02-27 09:34:02

标签: hadoop apache-spark

我有一个关于使用Spark处理位于HDFS中的非结构化文件的问题。

让我们说在这种情况下,我们有很多文件位于一个HDFS文件夹中。因此,Spark应用程序将读取该特定HDFS文件夹中的所有文件并对其进行处理。我的问题是,如果我们使用以下代码来读取文件并将其放在DataFrame中,如果HDFS文件夹包含大量文件且每个文件都有巨大的大小,则可能会出现内存不足问题:

df = spark.read.text('/user/tester/datafiles')

我们处理HDFS文件的最佳做法或方法是什么,如上面的方案?是我们需要逐个文件循环并处理它而不是一次读取所有文件?

感谢。

1 个答案:

答案 0 :(得分:0)

很少有人理解

1)spark.read.text是一个转换。它不会触发数据读取。

2)将数据转换为DataFrame的操作也可以是转换。因此可以避免数据加载。

3)最后,如果你执行某些操作,可以说count()。

  • 将创建一份工作。
  • 这项工作将根据随机边界划分为多个阶段。
  • 每个阶段将根据分区进一步划分为多个任务。
  • 现在任务将根据可用的执行者核心/节点!!!
  • 执行

现在,正如#Akash已经说过的那样,对于HDFS,文件已经存储在块中。 spark的默认分区在每个块的rdd中创建一个分区。所以任何一点,只会加载几个块进行处理。