2014-07-25 19 views
28

Chúng tôi biết rằng trong tia lửa có phương thức rdd.collect chuyển đổi RDD thành danh sách.Cách chuyển đổi Danh sách thành JavaRDD

List<String> f= rdd.collect(); 
String[] array = f.toArray(new String[f.size()]); 

Tôi đang cố gắng làm chính xác ngược lại trong dự án của mình. Tôi có một ArrayList của String mà tôi muốn chuyển đổi sang JavaRDD. Tôi đang tìm giải pháp này trong một thời gian nhưng không tìm thấy câu trả lời. Ai có thể giúp tôi ở đây không?

Trả lời

47

Bạn đang tìm kiếm JavaSparkContext.parallelize(List) và tương tự. Điều này cũng giống như trong API Scala.

+0

Cảm ơn sự giúp đỡ của Sean. Danh sách chuyển đổi của nó thành JavaRDD. –

+0

Bạn có bất kỳ ý tưởng nào về "JdbcRDD" trong tia lửa không? Tôi đang cố gắng để thực hiện nó trong Java nhưng không có bất kỳ bài hoặc ví dụ về nó. Tôi có một liên kết (https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/JdbcRDD.scala) về nó. Nhưng tôi không thể hiểu mã scala cho nó. –

+0

@AmitabhRanjan cần một câu hỏi riêng cho rằng – samthebest

-1
List<StructField> fields = new ArrayList<>(); 
fields.add(DataTypes.createStructField("fieldx1", DataTypes.StringType, true)); 
fields.add(DataTypes.createStructField("fieldx2", DataTypes.StringType, true)); 
fields.add(DataTypes.createStructField("fieldx3", DataTypes.LongType, true)); 


List<Row> data = new ArrayList<>(); 
data.add(RowFactory.create("","","")); 
Dataset<Row> rawDataSet = spark.createDataFrame(data, schema).toDF(); 
1

Có hai cách để chuyển đổi bộ sưu tập thành RDD.

1) sc.Parallelize(collection) 
2) sc.makeRDD(collection) 

Cả hai phương pháp này là giống hệt nhau, vì vậy chúng tôi có thể sử dụng bất kỳ trong số họ

+0

+1 - Đây là giải pháp hoàn hảo cho databricks. Mặc dù tôi không nghĩ rằng từ khóa sc có ý nghĩa bên ngoài bối cảnh đó? – Paul

+0

chúng tôi nhận được một đối tượng sparkcontext (sc) được tạo trong spark-shell, nếu không chúng ta phải tạo ra một sparkContext (Có thể chỉ có một sparkContext cho mỗi chương trình) –

+0

oh, ok vì vậy nó thậm chí còn tổng quát hơn tôi nghĩ. Tôi có kính bảo vệ dữ liệu trên – Paul

2

Thêm vào Sean Owen và những người khác giải pháp

Bạn có thể sử dụng JavaSparkContext#parallelizePairs cho List của Tuple

List<Tuple2<Integer, Integer>> pairs = new ArrayList<>(); 
pairs.add(new Tuple2<>(0, 5)); 
pairs.add(new Tuple2<>(1, 3)); 

JavaSparkContext sc = new JavaSparkContext(); 

JavaPairRDD<Integer, Integer> rdd = sc.parallelizePairs(pairs); 
Các vấn đề liên quan