以下代码从 parquet 文件读取 Spark DataFrame 并写入另一个 parquet 文件。将 DataFrame 写入新的 Parquet 文件后,ArrayType 中的 Nullable 字段的 DataType 会发生更改。
Code:
SparkConf sparkConf = new SparkConf();
String master = "local[2]";
sparkConf.setMaster(master);
sparkConf.setAppName("Local Spark Test");
JavaSparkContext sparkContext = new JavaSparkContext(new SparkContext(sparkConf));
SQLContext sqc = new SQLContext(sparkContext);
DataFrame dataFrame = sqc.read().parquet("src/test/resources/users.parquet");
StructField[] fields = dataFrame.schema().fields();
System.out.println(fields[2].dataType());
dataFrame.write().mode(SaveMode.Overwrite).parquet("src/test/resources/users1.parquet");
DataFrame dataFrame1 = sqc.read().parquet("src/test/resources/users1.parquet");
StructField [] fields1 = dataFrame1.schema().fields();
System.out.println(fields1[2].dataType());
Output:
ArrayType(IntegerType,false)
ArrayType(IntegerType,true)
Spark版本是:1.6.2
对于 Spark 2.4 或更早版本,从 Spark sql 写入的所有列都可以为空。引用官方指南 http://spark.apache.org/docs/2.4.0/sql-data-sources-parquet.html
Parquet 是一种列式格式,许多其他数据处理系统都支持该格式。 Spark SQL 支持读取和写入 Parquet 文件,自动保留原始数据的架构。写入 Parquet 文件时,出于兼容性原因,所有列都会自动转换为可为空。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)