如何使用spark

时间:2016-08-02 08:52:40

标签: scala apache-spark apache-spark-sql

我可以使用以下代码删除单个文件的前几行:

scala> val file = sc.textFile("file:///root/path/file.csv")

删除前5行:

 scala> val Data = file.mapPartitionsWithIndex{ (idx, iter) => if (idx == 0) iter.drop(5) else iter }

问题是:假设我有多个具有相同列的文件,并且我想将它们全部加载到rdd中,删除每个文件的前几行。

这实际上可行吗?

我很感激任何帮助。提前谢谢!

2 个答案:

答案 0 :(得分:4)

假设有2个文件。

false

Scala代码

ravis-MacBook-Pro:files raviramadoss$ cat file.csv
first_file_first_record
first_file_second_record
first_file_third_record
first_file_fourth_record
first_file_fifth_record
first_file_sixth_record
ravis-MacBook-Pro:files raviramadoss$ cat file_2.csv
second_file_first_record
second_file_second_record
second_file_third_record
second_file_fourth_record
second_file_fifth_record
second_file_sixth_record
second_file_seventh_record
second_file_eight_record

输出:

sc.wholeTextFiles("/Users/raviramadoss/files").flatMap( _._2.lines.drop(5) ).collect()

答案 1 :(得分:-1)

在Spark / Hadoop中,如果您将输入路径指定为包含所有文件的目录,那么您编写的代码将分别处理所有单个文件。

因此,要实现您的目标,只需将输入路径作为包含所有文件的目录。因此,前几行将从所有文件中删除。