在make spark app期间,我有一个问题。
在Spark API中,makeRDD
函数和parallelize
函数之间有什么区别?
答案 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
使用该密钥,可用于生成该分区本地数据的路径列表。然后可以在下一行加载该数据。