2014-07-25 51 views
28

我們知道在spark中有一個方法rdd.collect將RDD轉換爲列表。如何將列表轉換爲JavaRDD

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

我想在我的項目中完全相反。我有一個我想要轉換爲JavaRDD的String的ArrayList。我正在尋找這個解決方案很長一段時間,但還沒有找到答案。任何人都可以幫我在這裏嗎?

回答

47

您正在尋找JavaSparkContext.parallelize(List)及其他。這就像在Scala API中一樣。

+0

感謝您的幫助肖恩。將其轉換成JavaRDD列表。 –

+0

你對火花上的「JdbcRDD」有什麼想法嗎?我試圖用Java實現它,但沒有任何關於它的帖子或示例。我有一個鏈接(https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/JdbcRDD.scala)。但我無法理解它的scala代碼。 –

+0

@AmitabhRanjan需要一個單獨的問題 – 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

有兩種方法可將集合轉換爲RDD。

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

這兩個方法都是相同的,所以我們可以使用其中的任何

+0

+1 - 這是數據庫的完美解決方案。雖然我不認爲這個詞在這個範圍之外有意義嗎? – Paul

+0

我們得到了一個在spark-shell中創建的sparkcontext對象(sc),否則我們必須創建一個sparkContext(每個程序只能有一個sparkContext) –

+0

哦,好吧,它比我想象的更普遍。我有數據臂護目鏡 – Paul

2

添加到肖恩·歐文和其他解決方案

可以使用JavaSparkContext#parallelizePairsTupleList

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);