在 Spark 1.3 中,我们从 Spark SQL 中删除了 "Alpha" 的标签,作为一部分已经清理过的可用的 API 。从 Spark 1.3 版本以上,Spark SQL 将提供在 1.X 系列的其他版本的二进制兼容性。这种兼容性保证不包括被明确标记为不稳定的(即 DeveloperApi 类或 Experimental)的 API。
升级到 Spark SQL 1.3 版本时,用户会发现最大的变化是,SchemaRDD
已更名为 DataFrame
。这主要是因为 DataFrames 不再从 RDD 直接继承,而是由 RDDS 自己来实现这些功能。DataFrames 仍然可以通过调用 .rdd
方法转换为 RDDS 。
在 Scala 中,有一个从 SchemaRDD 到
DataFrame
类型别名,可以为一些情况提供源代码兼容性。它仍然建议用户更新他们的代码以使用 DataFrame
来代替。Java 和 Python 用户需要更新他们的代码。
此前 Spark 1.3 有单独的Java兼容类(JavaSQLContext 和
JavaSchemaRDD
),借鉴于 Scala API。在 Spark 1.3 中,Java API 和 Scala API 已经统一。两种语言的用户可以使用 SQLContext
和 DataFrame
。一般来说论文类尝试使用两种语言的共有类型(如 Array 替代了一些
特定集合)。在某些情况下不通用的类型情况下,(例如,passing in closures 或 Maps)使用函数重载代替。
此外,该 Java 的特定类型的 API 已被删除。Scala 和 Java 的用户可以使用存在于 org.apache.spark.sql.types 类来
描述编程模式。
许多 Spark 1.3 版本以前的代码示例都以 import sqlContext._ 开始
,这提供了从 sqlContext 到 cope 的所有功能。在 Spark 1.3 中,我们移除了从 RDDs 到 DateFrame 再到 SQLContext 内部对象的隐式转换。
此外,隐式转换现在只是通过 toDF 方法增加 RDDs 所组成的一些类型(例如 classes 或 tuples),而不是自动应用。
当使用 DSL 的内部函数(现在由 DataFrame
API 代替)的时候,用于一般会导入 org.apache.spark.sql.catalyst.dsl 来
代替一些公有的 DataFrame 的 API 函数 : import org.apache.spark.sql.functions._
。
Spark 1.3 移除存在于基本 SQL 包的 DataType
类型别名。开发人员应改为导入类 org.apache.spark.sql.types。
用于注册 UDF 的函数,不管是 DataFrame DSL 还是 SQL 中用到的,都被迁移到 SQLContext 中的 udf对象中。
sqlContext.udf.register("strLen", (s: String) => s.length())
Python UDF 注册保持不变。
在 Python 中使用 DataTypes 时,你需要先构造它们(如:StringType()),而不是引用一个单例对象。