我在 Spark 中遇到数据局部性问题。 我想知道我是否有可能告诉 Spark 应该如何在节点上对数据进行分区。
比如我在HDFS上有一个文件,我想获取一个RDD。我想根据此数据的特定属性(例如,根据此数据最后一列的值)对该数据进行分区。
提前致谢
最佳答案
这种行为由您正在创建的 RDD 子类控制,在您的示例中是 Haddoop 或 NewHadoopRDD,具体取决于您使用的是哪种 Hadoop API。 在每个 RDD 子类中,您可以覆盖 getPreferedLocations 方法,该方法说明每个分区的计算位置。
正如@user52045 所说,您可以实现自定义分区程序,但数据将被发送到集群中的每台机器,因为您将首先拥有一个 HadoopRDD,然后您必须应用 partitionBy(CustomPartitioner) 方法才能获得数据您在分区程序中设计的位置。
希望对你有用
关于scala - 我如何更改 Apache Spark 上的数据位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30568105/