如何用Spark高效处理zip、gzip、excel等多种格式文件?

摘要:一、当后缀名为zip、gzip,spark可以自动处理和读取 -> 关注清哥聊技术公众号,了解更多技术文章 1、spark非常智能,如果一批压缩的zip和gzip文件,并且里面为一堆text文件时,可以用如下方式读取或
一、当后缀名为zip、gzip,spark可以自动处理和读取->关注清哥聊技术公众号,了解更多技术文章 1、spark非常智能,如果一批压缩的zip和gzip文件,并且里面为一堆text文件时,可以用如下方式读取或者获取读取后的schema spark.read.text("xxxxxxxx/xxxx.zip") spark.read.text("xxxxxxxx/xxxx.zip").schema spark.read.text("xxxxxxxx/xxxx.gz") spark.read.text("xxxxxxxx/xxxx.gz").schema 2、当压缩的一批text文件里面的内容为json时,还可以通过read.json读取,并且自动解析为json数据返回 spark.read.json("xxxxxxxx/xxxx.zip") spark.read.json("xxxxxxxx/xxxx.zip").schema spark.read.json("xxxxxxxx/xxxx.gz") spark.read.json("xxxxxxxx/xxxx.gz").schema  备注:spark在读取text、zip、gzip等各种文件时,支持直接传入类似这样的通配符匹配路径 转载请注明:张永清 博客园:https://www.cnblogs.com/laoqing/p/15516458.html spark.read.text("xxxxxxxx/*.zip") spark.read.text("xxxxxxxx/*") spark读取文件内容时是按行处理的,如果需要将文件里面多行处理为一行数据,可以通过设置multiLine=true(默认为false) spark.read.option("multiLine","true").json("xxxxxxxx/xxxx.zip") 3、当zip或者gzip的文件没有任何后缀名或者后缀名不对时,那spark就无法自动读取了,但是此时可以通过类似如下的方式来读取 spark.read.format("binaryFile").load("dbfs:/xxx/data/xxxx/xxxx/2021/07/01/*") 读取到后,自己在代码中来解析处理读取的二进制文件数据 spark.read.format("binaryFile").load("dbfs:/xxx/data/xxxx/xxxx/2021/07/01/*").foreach(data=>{ // data解析 }) 而且在读取到binaryFile文件后,还可以通过注册udf函数来进行处理转载请注明:张永清 博客园:https://www.cnblogs.com/laoqing/p/15516458.html spark在读取数据转换为dataframe时,是通过DataFrameReader.scala来处理的(https://github.com/apache/spark/blob/v3.1.2/sql/core/src/main/scala/org/apache/spark/sql/DataFrameReader.scala)。从中可以看到option选项除了支持multiLine外,还支持了很多,从源码注释中可以看到,如下所示。
阅读全文