Spark Scala中对多个文件的同时操作

时间:2018-10-24 07:14:56

标签: scala apache-spark apache-spark-sql

我在一个文本文件中有一个ID列表= id1,id2,id3等

val IDList = sc.textFile("/home/.../IDList.csv").flatMap(line => line.split(","))

每个id与一个仓库中的csv数据帧相关联: “ / home / data /” + idX +“ / *。csv”

对于IDList中的每个ID,o都希望读取并处理数据

我试图做这样的事情而没有结果:

val IDList = sc.textFile("/home/.../IDList.csv").flatMap(line => line.split(","))
    IDList.map(x => {
          val path =  "/home/data" + x + "/*.csv"
          val dataFrame = sparkSession.read.format("csv").option("header", "true").load(path)
            .withColumn().filter()blablabla
          // save 
          dataFrame.repartition(1).write.format("csv").option("header","true").save("/home/g179887/Desktop/test")
        })

感谢帮助

1 个答案:

答案 0 :(得分:0)

您应使用scala parallel collections存储ID列表,并使用spark读取文件内容。这样,spark可以读取内容  并同时操作多个文件。

import scala.io.Source
val IDList = Source.fromFile("/home/.../IDList.csv").getLines.toList.par

.map()的内容可以保持不变。