从外部存储的结构化文件创建DataFrame(options的多种模式)---常用的一种方式

options的多种模式

Option可选操作项
.option("mode", "FAILFAST") // 读取模式
读取模式的常用值有
permissive:当遇到损坏的记录时,将其所有字段设置为 null
dropMalformed:删除格式不正确的行
failFast:遇到格式不正确的数据时立即失败
.option("inferSchema", "true") // 是否自动推断 schema
.option("path", "path/to/file(s)") // 文件路径
.option("header", "false") // 文件中的第一行是否为列的名称 CSV文件使用

1. 从txt文件中创建DataFrame

从txt文件中创建DataFrame
如果是从普通的文本文件创建DataFrame 文件中的列和列的分隔符不清楚
所以创建的DataFrame只有一列,一列就是一行数据
val sc = new SparkConf().setMaster("local[2]").setAppName("demo")
val session = SparkSession.builder().config(sc).getOrCreate()
val map = Map[String, String]("mode" -> "FAILFAST", "inferSchema" -> "true")
val frame = session.read.options(map).text("hdfs://node1:9000/student.txt")
frame.show()

2. 从json文件中创建DataFrame -- 常用

从json文件中创建DataFrame -- 常用 -- 列名就是json对象的key值
{"name": "zs","age": 20,"sex":"男"}
json文件只能存在json对象,每一个json对象之间以换行符分隔
val map1 = Map[String, String]("mode" -> "FAILFAST", "inferSchema" -> "true")
val dataFrame = session.read.options(map1).json("hdfs://node1:9000/student.json")
dataFrame.show()

3. 从csv文件中创建DataFrame -- 最常用

从csv文件中创建DataFrame -- 最常用 -- 大数据中的很多数据都是以csv文件格式存储的
csv文件--是以,分割的一种文件格式,可以使用execel或者记事本打开的一种特殊的结构化数据我呢见
"header"->"true"把第一列当作表格的列名来处理
val map2 = Map[String, String]("mode" -> "FAILFAST", "inferSchema" -> "true", "header" -> "true")
val dataFrame2 = session.read.options(map2).csv("hdfs://node1:9000/student.csv")
dataFrame2.show()
val dataFrame4 = session.read.options(map2).format("json").load("hdfs://node1:9000/student.json")
dataFrame4.show()
// sparksql将结果输出方式写出
// dataFrame2.write.mode("append").parquet("hdfs://node1:9000/parquet")

4. 从parquet格式创建DataFrame--常用

从parquet格式创建DataFrame--常用
parquet格式文件Hive、SparkSQL、Flink都支持。列式存储文件格式
val dataFrame3 = session.read.options(map2).parquet("hdfs://node1:9000/parquet")
dataFrame3.show()
posted @   jsqup  阅读(138)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示