我创建了一个 spark 作业,它每天从我的 hdfs 中读取一个文本文件,并从文本文件的每一行中提取唯一键。每个文本文件中大约有 50000 个键。然后通过提取的密钥过滤相同的数据并保存到 hdfs。
我想在我的 hdfs 中创建一个目录,其结构为: hdfs://.../date/key 包含过滤后的数据。问题是写入 hdfs 需要很长时间,因为键太多了。
现在的写法:
val inputData = sparkContext.textFile(""hdfs://...", 2)
val keys = extractKey(inputData) //keys is an array of approx 50000 unique strings
val cleanedData = cleanData(inputData) //cleaned data is an RDD of strings
keys.map(key => {
val filteredData = cleanedData.filter(line => line.contains(key))
filteredData.repartition(1).saveAsTextFile("hdfs://.../date/key")
})
有没有办法让它更快?我曾考虑将数据重新分区为提取的密钥数量,但我无法以 hdfs://.../date/key 格式保存。我也尝试过 groupByKey 但我无法保存这些值,因为它们不是 RDD。
任何帮助表示赞赏:)