当前位置:网站首页>Spark读取多目录

Spark读取多目录

2022-08-09 13:11:00 南风知我意丿

项目场景:

上游任务按类型生成json文件存放到hdfs上,会生成很多目录。
下游任务需要读取这些目录下得文件,生成df进行处理。


解决方案:

目录结构:

在这里插入图片描述

1.sparkContext

方式一

  val session: SparkSession = SparkSession.builder().master("local[*]").appName("read_Muti_catalogue").getOrCreate()
    val sc: SparkContext = session.sparkContext
    import session.implicits._


    //方式一:
    sc.textFile("/tmp/lzx/a,/tmp/lzx/b").toDF().show(false)

方式二

val session: SparkSession = SparkSession.builder().master("local[*]").appName("read_Muti_catalogue").getOrCreate()
    val sc: SparkContext = session.sparkContext
    import session.implicits._

    //2.1.方式二:匹配字符
    val path1 = "/tmp/lzx/[a]"
    val path2 = "/tmp/lzx/[b]"
    val arryPath: Array[String] = Array(path1, path2)
    val rdds: Array[RDD[String]] = arryPath.map(sc.textFile(_))
    sc.union(rdds).toDF().show(false)

    //2.2.方式二:匹配数字
    val path3 = "/tmp/lzx/*1"
    val path4 = "/tmp/lzx/*2"
    val arryPath2: Array[String] = Array(path3, path4)
    val rdds2: Array[RDD[String]] = arryPath2.map(sc.textFile(_))
    sc.union(rdds2).toDF().show(false)

    session.close()

2.sparkSession

 //3.SparkSession
    println("3.SparkSession-----------------------")
    val path5 = "/tmp/lzx/*1"
    val path6 = "/tmp/lzx/*2"
    val arryPath3: Array[String] = Array(path5, path6)

    // :_* 作为一个整体,一般可以用于获取一个数组的全部字段
    //spark.read.textFile方法返回只有一列value的DataSet表。
    val ds: Dataset[String] = session.read.textFile(arryPath3: _*)
    ds.show()


    //spark.read.text方法返回只有一列value的DataFrame表。
    val df: DataFrame = session.read.text(arryPath3: _*)
    df.show()

3.通配符使用说明

在这里插入图片描述

注意:

每个路径都要定位到最后一级。
路径之间不能存在包含关系。
目录与文件不要混放,即放在同一个目录下。
路径中可使用通配符

参考

https://blog.csdn.net/weixin_40829577/article/details/103847405

原网站

版权声明
本文为[南风知我意丿]所创,转载请带上原文链接,感谢
https://blog.csdn.net/lzx116/article/details/126059493