scala - 我如何更改 Apache Spark 上的数据位置

标签 scala hadoop apache-spark

我在 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/

相关文章:

java - 如何以编程方式将两个文本文件中的 "changes"合并到一个文件中?

scala - 如何在Scala中设计一个简单的监控库?

hadoop - Hive中的数据解析

apache-spark - Spark-submit 给出错误,因为系统找不到指定的路径

apache-spark - Spark dataFrame.colaesce(1) 或 dataFrame.reapartition(1) 似乎不起作用

python - 如何计算 Spark RDD 中出现的次数并将其作为字典返回?

Scala 反射 : How to find a no-arg constructor via reflection (if there are multiple constructors) ? "no-arg"的类型签名是什么?

scala - 将字符串转换为可运行代码的方法有哪些?

hadoop - 是否可以使用 C# 应用程序连接 Ubuntu HDFS

sql - Hive Query,有什么好的方法可以优化这些并集?