在Spark API中,makeRDD函数和parallelize函数有什么区别?

时间:2015-07-15 10:39:17

标签: scala apache-spark rdd

在make spark app期间,我有一个问题。 在Spark API中,makeRDD函数和parallelize函数之间有什么区别?

1 个答案:

答案 0 :(得分:2)

如@ zero323所述,makeRDD有2个实现。一个与并行化相同。即使您没有使用HDFS,other也是将数据局部性注入Spark应用程序的非常有用的方法。

例如,根据某些业务逻辑,当您的数据已经跨Spark集群分布在磁盘上时,它会提供数据位置。假设您的目标是创建一个RDD,它将从磁盘加载数据并使用函数对其进行转换,并且您希望在尽可能多地运行本地数据的同时执行此操作。

为此,您可以使用makeRDD创建一个空的RDD,并为每个RDD分区分配不同的位置首选项。每个分区都可以负责加载您的数据。只要您使用分区本地数据的路径填充分区,然后执行后续转换将是节点本地的。

Seq<Tuple2<Integer, Seq<String>>> rddElemSeq = 
                       JavaConversions.asScalaBuffer(rddElemList).toSeq();
RDD<Integer> rdd = sparkContext.makeRDD(rddElemSeq, ct);
JavaRDD<Integer> javaRDD = JavaRDD.fromRDD(rdd, ct);
JavaRDD<List<String>> keyRdd = javaRDD.map(myFunction);
JavaRDD<myData> myDataRdd = keyRdd.map(loadMyData);

在此代码段中,rddElemSeq包含每个分区的位置首选项(IP地址)。每个分区还有一个Integer,就像一把钥匙。我的函数myFunction使用该密钥,可用于生成该分区本地数据的路径列表。然后可以在下一行加载该数据。