2015-04-28 23 views
9

Tôi đang cố lưu một Khung dữ liệu Spark (trên 20G) vào một tệp json duy nhất trong Amazon S3, mã của tôi để lưu khung dữ liệu giống như sau:Lưu một Tệp dữ liệu Spark lớn thành một tệp json trong S3

dataframe.repartition(1).save("s3n://mybucket/testfile","json") 

Nhưng tôi nhận được lỗi từ S3 "Yêu cầu tải lên của bạn vượt quá kích thước tối đa cho phép", tôi biết rằng kích thước tệp tối đa được Amazon cho phép là 5GB.

Có thể sử dụng tính năng tải lên nhiều phần S3 với Spark không? hoặc có cách nào khác để giải quyết vấn đề này?

Btw tôi cần dữ liệu trong một tệp vì người dùng khác sẽ tải xuống sau.

* Im sử dụng tia lửa apache 1.3.1 trong cụm 3 nút được tạo bằng tập lệnh spark-ec2.

Thanks a lot

JG

+0

Tôi chỉ thấy rằng nếu tôi sử dụng s3a thay vì s3n nó có thể giải quyết vấn đề của tôi (http://wiki.apache.org/hadoop/AmazonS3), nhưng điều là phiên bản hadoop sử dụng (Hadoop 2.0.0-cdh4.2.0), nó không hỗ trợ s3a. Ý tưởng nào? Cảm ơn một lần nữa. – jegordon

Trả lời

18

Tôi sẽ thử tách khung dữ liệu lớn thành một loạt các khung dữ liệu nhỏ hơn mà bạn thêm vào cùng một tệp trong mục tiêu.

df.write.mode('append').json(yourtargetpath) 
+8

@ TheRandomSuite: Bất kỳ cơ hội nào, bạn có biết nếu có thể tránh được định dạng hadoopish và lưu dữ liệu vào một tệp theo tên khóa s3 mà tôi chọn thay vì thư mục với '_SUCCES' và' part- * '? – lisak

+1

Điều này cũng làm việc cho tôi !! Cảm ơn @Jared !! –

-2

s3a không phải là phiên bản sản xuất trong Spark tôi nghĩ. Tôi sẽ nói rằng thiết kế không phải là âm thanh. phân vùng (1) sẽ là khủng khiếp (những gì bạn đang nói là tia lửa để hợp nhất tất cả các phân vùng để một duy nhất). Tôi khuyên bạn nên thuyết phục hạ lưu nội dung từ thư mục chứ không phải một tệp duy nhất

2

Hãy thử điều này

dataframe.write.format("org.apache.spark.sql.json").mode(SaveMode.Append).save("hdfs://localhost:9000/sampletext.txt"); 
Các vấn đề liên quan