我想处理数据块(来自csv文件),然后在每个分区/块中进行一些分析。 我该如何做,然后以并行方式处理这些多个块?我想在每个块上运行map和reduce
答案 0 :(得分:0)
我认为你不能只阅读文件的一部分。另外,我不太确定我是否理解你的意图,或者你是否理解了Spark的概念。
如果您阅读文件并在map
/ Dataset
上应用RDD
功能,Spark会自动并行处理您的数据功能。
也就是说,群集中的每个工作人员都将被分配到您的数据分区,即将处理" n%"的数据。分区器决定哪个数据项位于同一分区中。默认情况下,Spark使用哈希分区程序。
(map
的替代方案,您可以申请mapParititions
)
以下是我想到的一些想法:
使用partitionBy
方法对数据进行分区,并创建自己的分区程序。例如,此分区程序可以将第一个n
行放入分区1,将下一个n
行放入分区2,等等。
如果您的数据足够小以适应驱动程序,您可以将整个文件collect
读入数组,并跳过所需的行数(在第一次运行中,没有行) (已跳过),接下来的n
行,然后再次创建这些行的RDD。
您可以预处理数据,以某种方式创建分区,即包含n%,然后再次存储它。这将在您的磁盘/ HDFS上创建不同的文件:part-00000
,part-00001
等。然后在您的实际程序中,您可以一个接一个地读取所需的零件文件......