我想使用GUI使用Azure Databricks AutoML训练回归预测模型。训练数据非常广泛。除了响应变量之外的所有列都将用作功能。
要使用Databricks AutoML GUI,我必须将数据作为表存储在Hive元存储中。我有一个大型DataFramedf
,它有40000多列。
print((df.count(), len(df.columns)))
(33030, 45502)
使用以下PySpark命令将这些数据写入Hive中的一个表(我认为这是标准的(:
df.write.mode('overwrite').saveAsTable("WIDE_TABLE")
遗憾的是,此作业未在"可接受"时间(10小时(内完成。我取消了,因此没有错误消息。
当我用减少列数时
df.select(df.columns[:500]).write.mode('overwrite').saveAsTable("WIDE_TABLE")
它的效果更好,在9.87分钟内完成,所以这个方法应该有效。
这能解决吗:
- 有更好的计算实例吗
- 有更好的剧本吗
- 一点也不,如果是的话,还有其他方法吗
[编辑以解决评论中的问题]
运行时和驱动程序摘要:
2-16 Workers 112-896 GB Memory 32-256 Cores (Standard_DS5_v2)
1 Driver 56 GB Memory, 16 Cores (Same as worker)
Runtime10.4.x-scala2.12
为了给人一个时间印象,我在下面加了一张表。
列 | 时间(分钟( |
---|---|
10 | 1.94 |
100 | 1.92 |
200 | 3.04 |
500 | 9.87 |
1000 | 25.91 |
5000 | 938.4 |
我认为您的案例与Spark资源配置或网络连接无关,而是与Spark设计本身有关。
简而言之,Spark是为长而窄的数据而设计的,这与您的数据帧正好相反。当你观察你的实验时,当你的列大小增加时,耗时呈指数增长。虽然这是关于读取csv而不是写入表,但你可以查看这篇文章,了解Spark不擅长处理宽数据帧的原因:尽管我增加了节点的数量,但Spark csv的读取速度非常慢
虽然我以前没有使用Azure AutoML,但基于数据集来实现您的目标,我认为您可以尝试:
- 尝试使用python-pandas数据帧和Hive连接库来查看是否有任何性能增强
- 在写入配置单元之前,将所有列连接到单个数组/向量中