使用spark读取parquet文件时,例如读取在file:///E:/test/clean
文件夹下的文件:
而我们的文件内容中的数据结构是:
val struct = StructType(
Array(
StructField("uid", StringType),
StructField("time", StringType),
StructField("netType", StringType),
StructField("ip", StringType),
StructField("desc_type", StringType),
StructField("day", StringType),
StructField("num", LongType),
StructField("city", StringType)
)
)
但是当我们读取文件时:
object TopNStatJob {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder().appName("TopNStatJob")
.config("spark.sql.sources.partitionColumnTypeInference.enabled","false")
.master("local[2]").getOrCreate()
val accessDF = spark.read.format("parquet").load("file:///E:/test/clean")
accessDF.printSchema()
accessDF.show(false)
spark.stop
}
}
控制台输出的schema信息是:
在之前定义的day
类型是string
,而读取时的类型变成了integer
。
因此需要修改:
val spark = SparkSession.builder().appName("TopNStatJob")
.config("spark.sql.sources.partitionColumnTypeInference.enabled","false")
.master("local[2]").getOrCreate()