2015-04-28 16 views
5

Tôi đã đọc một tập tin văn bản trong Spark sử dụng lệnhThêm một dòng mới vào một tập tin văn bản trong Spark

val data = sc.textFile("/path/to/my/file/part-0000[0-4]") 

Tôi muốn thêm một dòng mới như một tiêu đề của tập tin của tôi. Có cách nào để làm điều đó mà không cần biến RDD thành một mảng?

Cảm ơn bạn!

+1

tạo Rdd mới với 'val header = sc.parallize (List (" \ n "))' và chỉ thêm hai Rdd này cùng với 'header ++ data'. Nhưng nó không có ý nghĩa, tại sao bạn cần nó? – ipoteka

+0

Tôi xin lỗi, với dòng mới tôi có nghĩa là một dòng với tên của một số cột. Lỗi của tôi. Dù sao thì đó chính xác là những gì tôi cần, cảm ơn bạn! – amarchin

+0

Tôi khuyên bạn nên xem DataFrames. Đơn giản, dataframe chỉ là rdd với một số siêu thông tin về lược đồ và các loại. Và lưu ý rằng 'header ++ data' sẽ không duy trì thứ tự các Rdd lớn. – ipoteka

Trả lời

-2

RDD là không thay đổi. Điều đó có nghĩa là bạn sẽ không thể thay đổi nội dung của RDD khi được tạo. Bạn có thể tạo RDD mới từ RDD cơ sở bằng cách sử dụng phép biến đổi RDD.

+1

Điều này không thực sự là một câu trả lời mà không đưa ra một số ý tưởng về cách sử dụng những biến đổi đó để đạt được những gì anh ta muốn. Nó phải là một bình luận –

1

Bạn có thể không thực sự kiểm soát xem dòng mới sẽ là người đầu tiên (tiêu đề) hay không, nhưng bạn có thể tạo RDD singleton mới và hợp nhất nó với tồn tại:

val extendedData = data ++ sc.makeRDD(Seq("my precious new line")) 

nên

extendedData.filter(_ startsWith "my precious").first() 

sẽ có thể chứng minh rằng dòng của bạn được thêm

+0

Bạn thực sự có thể kiểm soát xem dòng mới sẽ là đầu tiên hay không. Trong ví dụ của bạn, nó sẽ là cuối cùng bởi vì bạn đặt nó sau RDD gốc. Và ý bạn là "có lẽ"? Và bạn thậm chí không nói về các tập tin. –

2

Tệp "Phần" được tự động xử lý dưới dạng tập hợp tệp.

val data = sc.textFile("/path/to/my/file") // Will read all parts. 

Chỉ cần thêm tiêu đề và viết nó ra:

val header = sc.parallelize(Seq("...header...")) 
val withHeader = header ++ data 
withHeader.saveAsTextFile("/path/to/my/modified-file") 

Lưu ý rằng vì đây có đọc và viết tất cả các dữ liệu, nó sẽ chậm hơn so với những gì bạn bằng trực giác có thể mong đợi một chút. (Sau khi tất cả các bạn chỉ cần thêm một dòng mới!) Vì lý do này và những người khác, bạn có thể không nên thêm tiêu đề này và thay vào đó lưu trữ siêu dữ liệu (danh sách các cột) riêng biệt với dữ liệu.

Các vấn đề liên quan