java - 存储并遍历排序的文件hdfs/spark

标签 java hadoop apache-spark hdfs

任务:

我在hdfs上有相当大的输入文件(假设每个文件有50GB)。我需要对它们进行排序,存储在某个地方(驱动程序/ hdfs /其他地方?),然后遍历它们直到满足特定条件。

问题:

如何才能最有效地实现它?

我应该在哪里保存排序的文件?如果在hdfs中如何流式传输它们以产生 Spark ,它们是否会被块加载?

最佳答案

由于您的文件位于HDFS中,因此只能从那里读取文件,并使用以下代码对其进行排序。我不确定您要哪种类型的排序,但是此代码将根据代码中存在的值对整个数据进行排序

val数据= sc.textFile(“hdfs://user/AppMetaDataPayload.csv”).map(line => line.split(“,”))

//如果要在排序后将其存储在内存中并仅从那里开始处理,请使用它。存储在内存中以进行进一步处理时,它将运行得更快

val d1 = data.flatMap(_。sorted)
d1.cache();


//如果您想将文件保存在HDFS路径中,请使用此选项
data.flatMap(_。sorted).saveAsTextFile(“hdfs://user/result6.csv”)

希望这会帮助你。

关于java - 存储并遍历排序的文件hdfs/spark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41908439/

相关文章:

caching - 在Spark Streaming中,我们可以将数据(hashmap)存储在Executor内存中吗

java - 使用 Spring-boot 在 Kafka 主题上发布重复消息

mysql - Hive 的 hour() 函数返回 12 小时时钟值

java - 未找到类 Spark Streaming 和 kafka

api - 使用hue api注册配置单元udf

Hadoop,机器之间负载不均

scala - 使用 Seq ("key") 语法对 Spark DataFrame 进行左外复杂连接

java - 在 Java 中获取 NullPointerException

java - 多进程 Java 程序在其运行的 JVM 下的实际机器上下文中是单个进程吗?

java - 使用 Htmlunit,按钮 click() 不起作用;