1 原因
parquet格式自带描述信息, 写出的数据必须明确数据类型; null是无数据类型, 增加空值列, 必须把null转成相应的数据类型。
2 添加方式
1) 方式01
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types.StringType
// 1 获取SparkSession
val spark = SparkSession
.builder()
.appName("spark_demo")
.master("local[3]")
.getOrCreate()
// 2 构造数据源
val df = spark.range(20)
// 3 增加string类型的空值列num
val res = df.withColumn("num", lit(null).cast(StringType))
// 4 以parquet格式保存到指定目录
res.write.mode("overwrite").parquet("res")
2)方式02
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types.StringType
// 1 获取SparkSession
val spark = SparkSession
.builder()
.appName("spark_demo")
.master("local[3]")
.getOrCreate()
// 2 构造数据源
val df = spark.range(20)
df.createOrReplaceTempView("df")
// 3 增加string类型的空值列num
val res = spark.sql("select id, cast(null as string) num from df")
// 4 以parquet格式保存到指定目录
res.write.mode("overwrite").parquet("res")