我在Spark中遇到数据位置问题。 我想知道我是否可以向Spark说出如何在节点上对数据进行分区。
例如,我在HDFS上有一个文件,我想获得一个RDD。我想根据此数据的特定属性对数据进行分区(例如,取决于此数据的最后一列的值)。
提前致谢
答案 0 :(得分:2)
这种行为由您正在创建的RDD子类控制,在您的示例中是Haddoop或NewHadoopRDD,具体取决于您使用的Hadoop API。 在每个RDD子类中,您可以覆盖getPreferedLocations方法,该方法说明每个分区的计算位置。
由于@ user52045表示您可以实现自定义分区程序,但数据将发送到群集的每台计算机,因为您将首先拥有HadoopRDD,然后必须应用partitionBy(CustomPartitioner)方法才能获得数据你在分区中设计的地方。
我希望这会有用