Reader
@Test
def reader(): Unit ={
val spark = SparkSession.builder()
.appName("reader_test")
.master("local[*]")
.getOrCreate()
val reader: DataFrameReader = spark.read
reader
.format("csv")
.option("header", true)
.option("inferSchema",true)
.load("dataset/PRSA_data_2010.1.1-2014.12.31.csv")
.show()
// .csv 底层依旧是 format.load , 只是框架做了一层封装
reader
.option("header", true)
.option("inferSchema",true)
.csv("dataset/PRSA_data_2010.1.1-2014.12.31.csv")
.show()
}
DataFrameReader 三大组件
- schema - 结构信息
- option - 可选参数
- format - 数据格式
Writer
DataFrameWriter 组件
- source - 写入目标
- mode - 写入模式
- extraOption - 外部参数
- partitioningColumns - 分区
- bucketColumnNames - 分桶
- sortColumnNames - 排序
@Test
def writer(): Unit = {
// 因为需要 写入 ,所以 需要 winutils.exe , 不然启动报错
System.setProperty("hadoop.home.dir", "D:\\software\\hadoop\\hadoop-2.7.2")
val spark = SparkSession.builder()
.appName("writer")
.master("local[*]")
.getOrCreate()
val reader: DataFrameReader = spark.read
val df = reader
.option("header", true)
.option("inferSchema", true)
.csv("dataset/PRSA_data_2010.1.1-2014.12.31.csv")
df.write.json("dataset/PRSA_data1.json")
df.write.format("json").save("dataset/PRSA_data2.json")
}
链接:百度云盘 - winutils.exe
提取码:4ewn
Parquet
@Test
def parquet(): Unit = {
System.setProperty("hadoop.home.dir", "D:\\software\\hadoop\\hadoop-2.7.2")
val spark = SparkSession.builder()
.appName("parquet")
.master("local[*]")
.getOrCreate()
// 1. 读取 csv 文件
val df = spark.read.option("header", true)
.csv("dataset/PRSA_data_2010.1.1-2014.12.31.csv")
// 2. 保存为 parquet 文件
// 小细节:写入的时候默认格式就是 parquet
df.write
// 写入格式 报错,覆盖,追加,忽略
// 小细节:默认报错
.mode(SaveMode.Overwrite)
.format("parquet")
.save("dataset/PRSA_data3")
// 3. 读取 parquet 文件
// 小细节:读取默认文件格式为 parquet
// 可以读取文件夹
val frame = spark.read
.load("dataset/PRSA_data3")
frame.show(10)
}
/**
* 表分区的概念不仅在 parquet 上有,其他格式的文件也可以指定表分区
*/
@Test
def parquetPartitions(): Unit = {
System.setProperty("hadoop.home.dir", "D:\\software\\hadoop\\hadoop-2.7.2")
val spark = SparkSession.builder()
.appName("parquet")
.master("local[*]")
.getOrCreate()
// 1. 读取 csv 文件
val df = spark.read.option("header", true)
.csv("dataset/PRSA_data_2010.1.1-2014.12.31.csv")
// 写入表分区
df.write
.partitionBy("year", "month")
.save("dataset/PRSA_data4")
// 读分区表
spark.read
.parquet("dataset/PRSA_data4")
.printSchema()
}
JSON
@Test
def json(): Unit = {
System.setProperty("hadoop.home.dir", "D:\\software\\hadoop\\hadoop-2.7.2")
val spark = SparkSession.builder()
.appName("parquet")
.master("local[*]")
.getOrCreate()
// 1. 读取 csv 文件
val df = spark.read.option("header", true)
.csv("dataset/PRSA_data_2010.1.1-2014.12.31.csv")
// df.write.json("dataset/PRSA_data5")
spark.read.json("dataset/PRSA_data5").show(10)
}
@Test
def json2(): Unit = {
System.setProperty("hadoop.home.dir", "D:\\software\\hadoop\\hadoop-2.7.2")
val spark = SparkSession.builder()
.appName("parquet")
.master("local[*]")
.getOrCreate()
// 1. 读取 csv 文件
val df: DataFrame = spark.read.option("header", true)
.csv("dataset/PRSA_data_2010.1.1-2014.12.31.csv")
// 把 Dataset[Object] 转为 Dataset[JsonString]
df.toJSON.show(10)
// 可以直接从RDD 读取json的dataframe 把 Dataset[JsonString] 转为 DataSet[Object]
val jsonrdd = df.toJSON.rdd
spark.read.json(jsonrdd).show(10)
}
1373

被折叠的 条评论
为什么被折叠?



