一、用spark实现读取csv文件
核心代码:
val spark = SparkSession
.builder()
.master("local[*]")
.appName("app")
.getOrCreate()
//读取文件
//方式一:
val srcDF = spark
.read
.format("csv")
.option("header","true")
.option("multiLine","true")
.option("encoding","gbk") //utf-8
.load("file:///C:\\1.csv")
//方式二:
val df = spark
.read
.option("header","true")
.option("multiLine","true")
.option("encoding","gbk") //utf-8
.csv("/user/hadoop/test.csv")
spark.stop()
关键参数:
format:指定读取csv文件。
header:是否指定头部行作为schema。
multiLine:在单元格中可能因为字数多有换行,但是不指定这个参数,处理数据时可能会报错。指定这个参数为true,可以将换行的单元格合并为1行。
encoding:指定编码格式如gbk或utf-8
如下表对option
里面的参数,进行介绍:
参数 | 解释 |
header | 默认是false ,将第一行作为列名 |
encoding | 默认是uft-8通过给定的编码类型进行解码 |
sep | 默认是, 指定单个字符分割字段和值 |
inferSchema | inferSchema(默认为 false`):从数据自动推断输入模式。 *需要对数据进行一次额外的传递 |
multiLine | 默认是false ,解析一条记录,该记录可能跨越多行 |
inferSchema | inferSchema(默认为 false`):从数据自动推断输入模式。 *需要对数据进行一次额外的传递。如:option("inferSchema", true.toString) //这是自动推断属性列的数据类型 |
nullValue | 默认是空的字符串,设置null值的字符串表示形式。从2.0.1开始,这适用于所有支持的类型,包括字符串类型 |
emptyValue | 默认是空字符串,设置一个空值的字符串表示形式 |
二、写出csv文件
核心代码:
resultDF.write.mode("Append").csv("C:\\Users\\Desktop\\123")
resultDF.writer.mode("overwrite").option("header","ture").option("encoding","utf-8").csv("/user/hadoop/data")
mode参数设置org.apache.spark.sql.DataFrameWriter源码:
/**
* Specifies the behavior when data or table already exists. Options include:
* <ul>
* <li>`overwrite`: overwrite the existing data.</li>
* <li>`append`: append the data.</li>
* <li>`ignore`: ignore the operation (i.e. no-op).</li>
* <li>`error` or `errorifexists`: default option, throw an exception at runtime.</li>
* </ul>
*
* @since 1.4.0
*/
def mode(saveMode: String): DataFrameWriter[T] = {
this.mode = saveMode.toLowerCase(Locale.ROOT) match {
case "overwrite" => SaveMode.Overwrite
case "append" => SaveMode.Append
case "ignore" => SaveMode.Ignore
case "error" | "errorifexists" | "default" => SaveMode.ErrorIfExists
case _ => throw new IllegalArgumentException(s"Unknown save mode: $saveMode. " +
"Accepted save modes are 'overwrite', 'append', 'ignore', 'error', 'errorifexists'.")
}
this
}