我有一对RDD [String,String],其中key是一个字符串,值是html。我想基于n个密钥将此rdd拆分为n个RDDS,并将它们存储在HDFS中。
htmlRDD = [key1,html
key2,html
key3,html
key4,html
........]
根据密钥拆分此RDD,并在HDFS上单独存储每个RDD的html。为什么我想这样做?当我试图将html从主RDD存储到HDFS时,由于某些任务被输出协调器拒绝提交,因此需要花费大量时间。 我在Scala中这样做。
htmlRDD.saveAsHadoopFile("hdfs:///Path/",classOf[String],classOf[String], classOf[Formatter])
答案 0 :(得分:0)
您也可以尝试使用此代替破坏RDD:
htmlRDD.saveAsTextFile("hdfs://HOST:PORT/path/");
我试过这个,它对我有用。我有RDD [JSONObject],它很好地编写了JSON Object的toString()。
答案 1 :(得分:0)
Spark将每个RDD分区保存到1个hdfs文件分区中。因此,要实现良好的并行性,源RDD应该有许多分区(实际上取决于整个数据的大小)。因此,我认为您希望将RDD拆分为多个RDD,而不是将RDD拆分为多个分区。 您可以使用repartition()或coallesce()
来完成