2016-05-06 25 views
1

目前,當我想產生火花的數據我做這樣的事情:如何在Spark中生成大量數據?

//generates an array list of integers 0...999 
final List<Integer> range = range(1000); 
JavaRDD<Data> rdd = sc 
    .parallelize(range) 
    .mapPartitionsWithIndex(generateData(), false); 

足夠大範圍我耗盡內存(500萬元爲例)。

怎樣才能解決這個問題?

回答

4

您從內存中獲取的主要原因是您正在從驅動程序機器生成隨機數據並將其並行化到其他機器。

final List<Integer> range = range(1000); 

該行生成隨機的整數列表,這些整數在一臺機器的內存中存在。 (請注意,這是Java代碼,並且您沒有運行spark API來生成隨機數據) 這並不理想,因爲您想要的可能是生成的數據超過了單個機器的內存量。

所以你需要做的是告訴每個工人(奴隸)的火花節點自行生成隨機數據。

如果你只是想測試隨機數據, Spark mllib有很好的功能,你可以使用。 (下面的代碼是從mllib documentation複製)

import org.apache.spark.SparkContext; 
import org.apache.spark.api.JavaDoubleRDD; 
import static org.apache.spark.mllib.random.RandomRDDs.*; 
JavaSparkContext jsc = ... 

JavaDoubleRDD u = normalJavaRDD(jsc, 1000000L, 10); 

輸出RDD現在包含有標準正態分佈產生百萬雙值被分配到10個parititons

0

對不起,如果答案是過時的,也許這可能對其他人有幫助。

@Hyun Joon Kim是正確的,但我只是想添加更多不使用Mllib的簡單選項。在這裏它是:

sc.parallelize(0 to 1000000) 

它返回RDD [INT]