2016-02-03 5 views
1

У меня есть dataframe я получил, сделав запрос, используя SQLContext:Рассчитать размер SparkR dataframe

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

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

> object.size(df) 
1024 bytes 

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

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

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

ответ

1

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

spark.driver.maxResultSize=1m 

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

1

Один из способов сделать это - использовать веб-интерфейс Spark Web. На вкладке «Исполнители» вы можете посмотреть память хранилища.

+0

Это solutiion, спасибо! Однако мне нужно было знать это с помощью кода, поэтому я могу избежать локального сбора данных. – matheusr

+0

Несомненно. Я не знаю, как вы будете использовать программные средства, кроме установки spark.eventLog.enabled в true или с помощью систем слежения искровой системы, чтобы выписать эти показатели для вас и прочитать их. – xyzzy

Смежные вопросы