迁移指南:SparkR(基于 Spark 的 R)
- 从 SparkR 3.5 升级到 4.0
- 从 SparkR 3.1 升级到 3.2
- 从 SparkR 2.4 升级到 3.0
- 从 SparkR 2.3 升级到 2.4
- 从 SparkR 2.3 升级到 2.3.1 及更高版本
- 从 SparkR 2.2 升级到 2.3
- 从 SparkR 2.1 升级到 2.2
- 从 SparkR 2.0 升级到 3.1
- 从 SparkR 1.6 升级到 2.0
- 从 SparkR 1.5 升级到 1.6
请注意,本迁移指南描述了 SparkR 特有的项。当将 SparkR 迁移到更高版本时,许多 SQL 迁移的项也适用。请参阅迁移指南:SQL、Dataset 和 DataFrame。
从 SparkR 3.5 升级到 4.0
- 在 Spark 4.0 中,SparkR 已被弃用,并将在未来版本中移除。
从 SparkR 3.1 升级到 3.2
- 此前,当 SparkR 在普通的 R shell 或 Rscript 中运行且找不到 Spark 发行版时,SparkR 会自动下载并安装 Spark 发行版到用户缓存目录以完成 SparkR 的安装。现在,它会询问用户是否要下载和安装。要恢复之前的行为,请将
SPARKR_ASK_INSTALLATION
环境变量设置为FALSE
。
从 SparkR 2.4 升级到 3.0
- 已弃用的方法
parquetFile
、saveAsParquetFile
、jsonFile
、jsonRDD
已被移除。请改用read.parquet
、write.parquet
、read.json
。
从 SparkR 2.3 升级到 2.4
- 此前,我们没有检查
spark.mlp
中最后一层大小的有效性。例如,如果训练数据只有两个标签,像c(1, 3)
这样的layers
参数以前不会导致错误,但现在会。
从 SparkR 2.3 升级到 2.3.1 及更高版本
- 在 SparkR 2.3.0 及更早版本中,
substr
方法的start
参数被错误地减去了一并被视为基于 0 的索引。这可能导致不一致的子字符串结果,并且与 R 中substr
的行为不匹配。在 2.3.1 及更高版本中,此问题已修复,substr
方法的start
参数现在是基于 1 的索引。例如,substr(lit('abcdef'), 2, 4))
在 SparkR 2.3.0 中会得到abc
,而在 SparkR 2.3.1 中则会得到bcd
。
从 SparkR 2.2 升级到 2.3
- 此前,在与
collect
结合使用时,stringsAsFactors
参数会被忽略,例如在collect(createDataFrame(iris), stringsAsFactors = TRUE))
中。此问题已得到纠正。 - 对于
summary
,已添加用于计算统计量的选项。其输出已从describe
的输出中更改。 - 如果 SparkR 包和 Spark JVM 的版本不匹配,可能会引发警告。
从 SparkR 2.1 升级到 2.2
- 已向
createDataFrame
和as.DataFrame
添加了numPartitions
参数。在拆分数据时,分区位置计算已与 Scala 中的计算方式保持一致。 - 方法
createExternalTable
已弃用,由createTable
代替。这两种方法都可以用于创建外部表或管理表。还添加了额外的目录方法。 - 默认情况下,derby.log 现在保存到
tempdir()
。当使用将enableHiveSupport
设置为TRUE
的方式实例化 SparkSession 时,会创建此目录。 spark.lda
此前未能正确设置优化器。此问题已得到纠正。- 多个模型摘要输出已更新,将
coefficients
设置为matrix
类型。这包括spark.logit
、spark.kmeans
、spark.glm
。spark.gaussianMixture
的模型摘要输出已添加对数似然 (log-likelihood) 作为loglik
。
从 SparkR 2.0 升级到 3.1
join
默认不再执行笛卡尔积,请改用crossJoin
。
从 SparkR 1.6 升级到 2.0
- 方法
table
已被移除,并由tableToDF
代替。 - 类
DataFrame
已重命名为SparkDataFrame
以避免名称冲突。 - Spark 的
SQLContext
和HiveContext
已弃用,由SparkSession
代替。现在应调用sparkR.session()
而非sparkR.init()
来实例化 SparkSession。一旦完成,当前活跃的 SparkSession 将用于 SparkDataFrame 操作。 - 参数
sparkExecutorEnv
不受sparkR.session
支持。要为执行器设置环境,请设置带有前缀“spark.executorEnv.VAR_NAME”的 Spark 配置属性,例如“spark.executorEnv.PATH”。 - 这些函数不再需要
sqlContext
参数:createDataFrame
、as.DataFrame
、read.json
、jsonFile
、read.parquet
、parquetFile
、read.text
、sql
、tables
、tableNames
、cacheTable
、uncacheTable
、clearCache
、dropTempTable
、read.df
、loadDF
、createExternalTable
。 - 方法
registerTempTable
已弃用,由createOrReplaceTempView
代替。 - 方法
dropTempTable
已弃用,由dropTempView
代替。 - 这些函数不再需要
sc
SparkContext 参数:setJobGroup
、clearJobGroup
、cancelJobGroup
。
从 SparkR 1.5 升级到 1.6
- 在 Spark 1.6.0 之前,写入的默认模式是
append
。在 Spark 1.6.0 中,为了与 Scala API 匹配,它被更改为error
。 - SparkSQL 将 R 中的
NA
转换为null
,反之亦然。 - 自 1.6.1 版本起,SparkR 中的
withColumn
方法支持向 DataFrame 添加新列或替换具有相同名称的现有列。