Scala 如何更改Apache Spark上的数据位置
我在Spark中遇到了数据局部性问题。 我想知道我是否有可能说出数据应该如何在节点上进行分区 例如,我有一个关于HDFS的文件,我想得到一个RDD。我希望根据该数据的特定属性(例如,根据该数据最后一列的值)对该数据进行分区Scala 如何更改Apache Spark上的数据位置,scala,hadoop,apache-spark,Scala,Hadoop,Apache Spark,我在Spark中遇到了数据局部性问题。 我想知道我是否有可能说出数据应该如何在节点上进行分区 例如,我有一个关于HDFS的文件,我想得到一个RDD。我希望根据该数据的特定属性(例如,根据该数据最后一列的值)对该数据进行分区 提前感谢这类行为由您正在创建的RDD子类控制,在您的示例中,是Haddoop还是NewHadoopRDD取决于您使用的HadoopAPI。 在每个RDD子类中,您可以覆盖getPreferedLocations方法,该方法表示每个分区的计算位置 正如@user52045所说,
提前感谢这类行为由您正在创建的RDD子类控制,在您的示例中,是Haddoop还是NewHadoopRDD取决于您使用的HadoopAPI。 在每个RDD子类中,您可以覆盖getPreferedLocations方法,该方法表示每个分区的计算位置 正如@user52045所说,您可以实现一个自定义分区器,但是数据将被发送到集群中的每台机器,因为您将首先拥有一个HadoopRDD,然后必须应用partitionBy(CustomPartitioner)方法,以便在分区器中拥有您设计的数据
我希望这将是有用的您可以实现自定义分区器。正如您所说,我有两种方法:1-实现自定义分区器,使用partitionBy(..),但它是在现有RDD上完成的,而不是在创建RDD之前。2-修改创建RDD的代码以覆盖getPreferedLocations。因此,当我调用例如myrdd=sc.textFile()时,这将适用于我的getPreferedLocations版本。是吗?