我可以使用以下代码删除单个文件的前几行:
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中,删除每个文件的前几行。
这实际上可行吗?
我很感激任何帮助。提前谢谢!
答案 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中,如果您将输入路径指定为包含所有文件的目录,那么您编写的代码将分别处理所有单个文件。
因此,要实现您的目标,只需将输入路径作为包含所有文件的目录。因此,前几行将从所有文件中删除。