将 Azure Databricks 中的非 SparkDataFrame 作为 .RData 保存到本地计算机
Save non-SparkDataFrame from Azure Databricks to local computer as .RData
在 Databricks (SparkR
) 中,我 运行 来自 kohonen
包的并行自组织映射的批处理算法,因为它大大减少了计算时间,因为反对我的本地机器。但是,在拟合模型后,我想 download/export 训练模型 (a list
) 到我的本地机器以继续处理结果(创建绘图等),这是不可用的方式数据块。我知道如何将 SparkDataFrame
保存并下载到 csv:
sdftest # a SparkDataFrame
write.df(sdftest, path = "dbfs:/FileStore/test.csv", source = "csv", mode = "overwrite")
但是,我不确定如何为 'regular' R list
对象执行此操作。
有没有什么方法可以将 Databricks 中创建的输出以 .RData
格式保存到我的本地计算机?如果没有,是否有一种解决方法可以让我继续在本地处理模型结果?
编辑:
library(kohonen)
# Load data
sdf.cluster <- read.df("abfss://cluster.csv", source = "csv", header="true", inferSchema = "true")
# Collet SDF to RDF as kohonen::som is not available for SparkDataFrames
rdf.cluster <- SparkR::collect(sdf.cluster)
# Change rdf to matrix as is required by kohonen::som
rdf.som <- as.matrix(rdf.cluster)
# Parallel Batch SOM from Kohonen
som.grid <- somgrid(xdim = 5, ydim = 5, topo="hexagonal",
neighbourhood.fct="gaussian")
set.seed(1)
som.model <- som(rdf.som, grid=som.grid, rlen=10, alpha=c(0.05,0.01), keep.data = TRUE, dist.fcts = "euclidean", mode = "online")
非常感谢任何帮助!
如果您的所有模型都可以放入 driver 的内存中,您可以使用 spark.lapply
。它是 base lapply
的分布式版本,需要一个函数和一个列表。 Spark 会将函数应用于列表的每个元素(如地图)并收集返回的 objects.
这里是一个拟合 kohonen 模型的例子,每个鸢尾属植物一个:
library(SparkR)
library(kohonen)
fit_model <- function(df) {
library(kohonen)
grid_size <- ceiling(nrow(df) ^ (1/2.5))
som_grid <- somgrid(xdim = grid_size, ydim = grid_size, topo = 'hexagonal', toroidal = T)
som_model <- som(data.matrix(df), grid = som_grid)
som_model
}
models <- spark.lapply(split(iris[-5], iris$Species), fit_model)
models
models
变量包含并行拟合的 kohonen 模型列表:
$setosa
SOM of size 5x5 with a hexagonal toroidal topology.
Training data included.
$versicolor
SOM of size 5x5 with a hexagonal toroidal topology.
Training data included.
$virginica
SOM of size 5x5 with a hexagonal toroidal topology.
Training data included.
然后你可以像往常一样save/serialise R object:
saveRDS(models, file="/dbfs/kohonen_models.rds")
请注意,存储在 /dbfs/
路径中的任何文件都可以通过 Databrick 的 DBFS 获得,可以通过 CLI 或 API.
访问
在 Databricks (SparkR
) 中,我 运行 来自 kohonen
包的并行自组织映射的批处理算法,因为它大大减少了计算时间,因为反对我的本地机器。但是,在拟合模型后,我想 download/export 训练模型 (a list
) 到我的本地机器以继续处理结果(创建绘图等),这是不可用的方式数据块。我知道如何将 SparkDataFrame
保存并下载到 csv:
sdftest # a SparkDataFrame
write.df(sdftest, path = "dbfs:/FileStore/test.csv", source = "csv", mode = "overwrite")
但是,我不确定如何为 'regular' R list
对象执行此操作。
有没有什么方法可以将 Databricks 中创建的输出以 .RData
格式保存到我的本地计算机?如果没有,是否有一种解决方法可以让我继续在本地处理模型结果?
编辑:
library(kohonen)
# Load data
sdf.cluster <- read.df("abfss://cluster.csv", source = "csv", header="true", inferSchema = "true")
# Collet SDF to RDF as kohonen::som is not available for SparkDataFrames
rdf.cluster <- SparkR::collect(sdf.cluster)
# Change rdf to matrix as is required by kohonen::som
rdf.som <- as.matrix(rdf.cluster)
# Parallel Batch SOM from Kohonen
som.grid <- somgrid(xdim = 5, ydim = 5, topo="hexagonal",
neighbourhood.fct="gaussian")
set.seed(1)
som.model <- som(rdf.som, grid=som.grid, rlen=10, alpha=c(0.05,0.01), keep.data = TRUE, dist.fcts = "euclidean", mode = "online")
非常感谢任何帮助!
如果您的所有模型都可以放入 driver 的内存中,您可以使用 spark.lapply
。它是 base lapply
的分布式版本,需要一个函数和一个列表。 Spark 会将函数应用于列表的每个元素(如地图)并收集返回的 objects.
这里是一个拟合 kohonen 模型的例子,每个鸢尾属植物一个:
library(SparkR)
library(kohonen)
fit_model <- function(df) {
library(kohonen)
grid_size <- ceiling(nrow(df) ^ (1/2.5))
som_grid <- somgrid(xdim = grid_size, ydim = grid_size, topo = 'hexagonal', toroidal = T)
som_model <- som(data.matrix(df), grid = som_grid)
som_model
}
models <- spark.lapply(split(iris[-5], iris$Species), fit_model)
models
models
变量包含并行拟合的 kohonen 模型列表:
$setosa
SOM of size 5x5 with a hexagonal toroidal topology.
Training data included.
$versicolor
SOM of size 5x5 with a hexagonal toroidal topology.
Training data included.
$virginica
SOM of size 5x5 with a hexagonal toroidal topology.
Training data included.
然后你可以像往常一样save/serialise R object:
saveRDS(models, file="/dbfs/kohonen_models.rds")
请注意,存储在 /dbfs/
路径中的任何文件都可以通过 Databrick 的 DBFS 获得,可以通过 CLI 或 API.