从 Spark SQL 1.4 升级到 1.5
- 使用手动管理的内存优化执行,现在是默认启用的,以及代码生成表达式求值。这些功能既可以通过设置 spark.sql.tungsten.enabled 为 false 来禁止使用。
- Parquet 的模式合并默认情况下不再启用。它可以通过设置重新启用 spark.sql.parquet.mergeSchema 到 true。
- 字符串在 Python 列的分辨率现在支持使用点(.)来限定列或访问嵌套值。例如 df['table.column.nestedField']。但是,这意味着如果你的列名中包含任何圆点,你现在必须避免使用反引号(如 table.`column.with.dots`.nested)。
- 在内存中的列存储分区修剪默认是开启的。它可以通过设置 spark.sql.inMemoryColumnarStorage.partitionPruning 为 false 来禁用。
- 无限精度的小数列不再支持,而不是 Spark SQL 最大精度为 38 。当从 BigDecimal 对象推断模式时,现在使用(38,18)。在 DDL 没有指定精度时,则默认保留 Decimal(10, 0)。
- 时间戳现在存储在 1 微秒的精度,而不是 1 纳秒的。
- 在 sql 语句中,浮点数现在解析为十进制。HiveQL 解析保持不变。
- SQL/DateFrame 数据帧功能的规范名称现在是小写(e.g. sum vs SUM)。
- JSON 数据源不会自动加载由其他应用程序(未通过 Spark SQL 插入到数据集的文件)创建的新文件。对于 JSON 持久表(即表的元数据存储在 Hive Metastore),用户可以使用 REFRESH TABLE SQL 命令或 HiveContext 的 refreshTable 方法,把那些新文件列入到表中。对于代表一个 JSON 数据集的数据帧,用户需要重新创建数据框,同时数据框中将包括新的文件。
- PySpark DataFrame 的 withColumn 方法支持添加新的列或替换现有的同名列。