将 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.

访问