Spark操作parquet文件

复制代码
 1 package code.parquet
 2 
 3 import java.net.URI
 4 
 5 import org.apache.hadoop.conf.Configuration
 6 import org.apache.hadoop.fs.{Path, FileSystem}
 7 import org.apache.spark.sql.{SaveMode, SparkSession}
 8 
 9 /**
10   * Created by zhen on 2018/12/11.
11   */
12 object ParquetIO {
13   // 指定hdfs根节点
14   private val hdfsRoot = "hdfs://172.20.32.163:8020"
15   // 获取HDFS路径
16   def getPath(path: String): Path = {
17     if (path.toLowerCase().startsWith("hdfs://")) {
18       new Path(path)
19     } else {
20       new Path(hdfsRoot + path)
21     }
22   }
23   def main(args: Array[String]) {
24     val spark = SparkSession.builder().appName("parquet").master("local[2]").getOrCreate()
25     spark.sparkContext.setLogLevel("WARN") // 设置日志级别为WARN
26     val fsUri = new URI(hdfsRoot)
27     val fs = FileSystem.get(fsUri, new Configuration())
28     val path = hdfsRoot + "/YXFK/compute/KH_JLD"
29     val has = fs.exists(getPath(path))
30     if(has){
31       // 读取hdfs文件系统parquet数据
32       val dataFrame = spark.read.parquet(path)
33       dataFrame.show(10)
34       // 筛选,过滤数据
35       val result = dataFrame.select("JLDBH", "JLDDZ", "JLDMC", "JLFSDM", "CJSJ")
36         .filter("JLDDZ is not null AND JLFSDM = 3")
37         .sort("JLDBH")
38       result.show(10)
39       // 写入部分数据到本地
40       result.write.mode(SaveMode.Overwrite).parquet("E:\\result")
41     }
42     // 读取本地parquet数据
43     val localDataFrame = spark.read.parquet("E:\\jld.parquet")
44     localDataFrame.show(10)
45     // 读取写入数据验证
46     val resultSpace = spark.read.parquet("E:\\result")
47     resultSpace.show(10)
48   }
49 }
复制代码

结果:

分析:Spark读取parquet数据默认为目录,因此可以只指定到你要读取的上级目录即可(本地模式除外),当保存为parquet时,会自动拆分,因此只能指定为上级目录。

 

 

posted @   云山之巅  阅读(10106)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示