Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何更改Apache Spark上的数据位置_Scala_Hadoop_Apache Spark - Fatal编程技术网

Scala 如何更改Apache Spark上的数据位置

Scala 如何更改Apache Spark上的数据位置,scala,hadoop,apache-spark,Scala,Hadoop,Apache Spark,我在Spark中遇到了数据局部性问题。 我想知道我是否有可能说出数据应该如何在节点上进行分区 例如,我有一个关于HDFS的文件,我想得到一个RDD。我希望根据该数据的特定属性(例如,根据该数据最后一列的值)对该数据进行分区 提前感谢这类行为由您正在创建的RDD子类控制,在您的示例中,是Haddoop还是NewHadoopRDD取决于您使用的HadoopAPI。 在每个RDD子类中,您可以覆盖getPreferedLocations方法,该方法表示每个分区的计算位置 正如@user52045所说,

我在Spark中遇到了数据局部性问题。 我想知道我是否有可能说出数据应该如何在节点上进行分区

例如,我有一个关于HDFS的文件,我想得到一个RDD。我希望根据该数据的特定属性(例如,根据该数据最后一列的值)对该数据进行分区


提前感谢

这类行为由您正在创建的RDD子类控制,在您的示例中,是Haddoop还是NewHadoopRDD取决于您使用的HadoopAPI。 在每个RDD子类中,您可以覆盖getPreferedLocations方法,该方法表示每个分区的计算位置

正如@user52045所说,您可以实现一个自定义分区器,但是数据将被发送到集群中的每台机器,因为您将首先拥有一个HadoopRDD,然后必须应用partitionBy(CustomPartitioner)方法,以便在分区器中拥有您设计的数据


我希望这将是有用的

您可以实现自定义分区器。正如您所说,我有两种方法:1-实现自定义分区器,使用partitionBy(..),但它是在现有RDD上完成的,而不是在创建RDD之前。2-修改创建RDD的代码以覆盖getPreferedLocations。因此,当我调用例如myrdd=sc.textFile()时,这将适用于我的getPreferedLocations版本。是吗?