我正在 databricks 上执行这个简单的代码:
df = spark.read.table(table_name).sample(fraction=0.1)
my_df = df.collect()
我正在访问 Unity Catalog 上的外部托管 Delta 表,该表具有以下属性:
Size
3.1GiB, 13 files
Columns
13
我使用的集群相当大,m4x10large,有 160GB 或内存,而且我还对数据进行了大量下采样。
代码执行得很快,但随后就永远卡在这里了:
与此同时,集群什么也没做。我查看了日志,唯一引起我注意的是:
2024-09-20T11:10:57.351+0000: [GC (Allocation Failure) [PSYoungGen: 36727934K->1398166K(35979264K)] 37066227K->1736467K(119453184K), 13.8056805 secs] [Times: user=68.37 sys=1.95, real=13.80 secs]
这是垃圾邮件,直到最终集群完全消失,我认为是因为 databricks 设置了一些超时。
知道从哪里开始调试吗?数据集已被优化,因为一开始我认为这可能是分区问题。
驱动器尺寸是多少? collect 方法会将所有数据带到驱动程序,如果它接近我们试图获取的内存,则会导致垃圾收集。
如果显示(df)工作正常,没有任何问题,则驱动程序大小可能是潜在问题。