Рассчитать размер кадра данных SparkR

У меня есть кадр данных, который я получил, выполнив запрос с использованием SQLContext:

> df <- sql(sqlContext, "SELECT * FROM myTable")

когда я пытаюсь получить его размер

> object.size(df)
1024 bytes

Я знаю, что это не реальный размер кадра данных, вероятно, потому, что он распределен по узлам Spark. Чтобы получить реальный размер, мне нужно собрать его:

> localDf <- collect(df)
> object.size(localDf)
45992 bytes

Иногда фрейм данных слишком велик, чтобы поместиться в локальной памяти. Есть ли простой способ узнать фактический размер кадра данных, не принося его локально?


person matheusr    schedule 03.02.2016    source источник


Ответы (2)


Один из способов сделать это — использовать веб-интерфейс Spark. На вкладке Executors вы можете посмотреть Storage Memory.

person xyzzy    schedule 03.02.2016
comment
Это решение, спасибо! Однако мне нужно было знать это через код, чтобы я мог избежать локального получения фрейма данных. - person matheusr; 04.02.2016
comment
Конечно. Я не знаю, как вы могли бы подключиться программно, кроме как установить для spark.eventLog.enabled значение true или использовать приемники системы мониторинга искры, чтобы записать эти показатели для вас и прочитать их. - person xyzzy; 04.02.2016

Я действительно нашел удовлетворительный обходной путь для этой проблемы. Я установил следующую конфигурацию Spark для загрузки SparkContext:

spark.driver.maxResultSize=1m

В этом случае, когда результат больше 1 МБ, spark вернет org.apache.spark.SparkException, поэтому я поймал его и вернул сообщение об ошибке.

person matheusr    schedule 04.02.2016