我的组织已转移到 Databricks,现在我陷入困境。
当我在 16GB 笔记本电脑上进行分析时,我可以将包含 1200 万行的 1GB 数据集读取到 R 会话中,并且可以毫无问题地使用它
{data.table}
。
我现在正尝试将一些管道迁移到 Databricks。
我已将 12M 行数据集放入 hive 元存储表中,当然,如果我想处理这些数据,我必须使用 Spark。
library(SparkR)
sparkR.session(enableHiveSupport = TRUE)
data <- tableToDF(path)
data <- collect(data)
data.table::setDT(data)
我有一个 32GB 的单节点集群,应该足以处理我的数据,但是上面的
collect
函数会导致整个会话崩溃:
火花驱动器意外停止并正在重新启动。你的 笔记本将自动重新连接。
我不想使用spark,我想使用data.table,因为我们所有的内部包都使用data.table。所以我需要将 Spark 数据帧转换为 data.table。我怎样才能实现这个目标?
自从我尝试让 Spark 和 R 相互交谈以来已经有一段时间了,所以这可能已经改变了,但据我所知,只有 SparkR 和 Sparklyr/dylyr 真正提供了解决方案。
data.table 不直接支持spark,显然是一种架构选择。
使用“.collect”将所有数据强制传输到驱动程序节点上,并消除了 Spark 处理该数据的所有好处,出于显而易见的原因,这是不可取的。 接受您的组织的选择并寻找更合适的解决方案或向他们建议为什么您认为这对您的用例没有意义是有意义的。