Да Наконец я получил решение. Включите эти библиотеки.
import org.apache.spark.sql.Row
import org.apache.spark.rdd.RDD
import org.apache.spark.rdd
import org.apache.spark.util.SizeEstimator
Как найти RDD Size:
def calcRDDSize(rdd: RDD[String]): Long = {
rdd.map(_.getBytes("UTF-8").length.toLong)
.reduce(_+_) //add the sizes together
}
Функция для определения размера DataFrame: (Эта функция просто преобразует DataFrame в RDD внутренне)
val dataFrame = sc.textFile(args(1)).toDF() // you can replace args(1) with any path
val rddOfDataframe = dataFrame.rdd.map(_.toString())
val size = calcRDDSize(rddOfDataframe)
Я думаю, что это должно быть обработано операционной системой. Нет встроенного ограничения, о котором я знаю; если необходимо, R будет использовать всю память, которую он может получить.
Чтобы получить информацию об итогах и / или в доступной памяти в Linux, вы можете попробовать
system('grep MemTotal /proc/meminfo')
или
system('free -m')
или
system('lshw -class memory')
Последняя команда будет жаловаться, что вы должны запускать ее как суперпользователя, и она даст предупреждение о том, что вывод может быть неточным; но по моему опыту он все равно предоставит довольно полезный вывод.
. Чтобы получить информацию об использовании памяти используемого сценария R, можно либо контролировать используемые в данный момент ресурсы, запустив top
в отдельный терминал или использовать, например, следующий системный вызов из сценария R:
system(paste0("cat /proc/",Sys.getpid(),"/status | grep VmSize"))
Надеюсь, что это поможет.
memory.size()
дает след памяти R proc и что команды, которые вы дали, дают ограничения памяти, назначенные R (что-то более похожее на команду R / windows`memory.limit()
), – user189035 18 March 2016 в 11:33