Это можно решить в O (n), используя алгоритм объединения-поиска. При первых двух строках ваших данных края, используемые в объединении-нахождении, следующие пары: (0,1), (1,3), (1,0), (0,3), (3,4 ), (4,5), (5,10)
Да Наконец я получил решение. Включите эти библиотеки.
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)
Если вы просто хотите подсчитать количество строк в rdd
, выполните:
val distFile = sc.textFile(file)
println(distFile.count)
Если вас интересуют байты, вы можете использовать SizeEstimator
:
import org.apache.spark.util.SizeEstimator
println(SizeEstimator.estimate(distFile))
https://spark.apache.org/docs/latest/api/java/org/apache/spark/util/SizeEstimator.html
dataframe
занимает в памяти и просто хочет размер файла на диске, почему бы вам просто не использовать обычные файловые утилиты?
– Glennie Helles Sindholt
28 January 2016 в 13:16
Ниже есть один путь, кроме SizeEstimator
. Я часто использую
, чтобы узнать из кода о RDD, если он кэширован, а точнее, сколько его разделов кэшируется в памяти и как многие кэшируются на диске? для получения уровня хранения, также хочу знать текущий фактический статус кэширования. Знать потребление памяти.
Spark Context имеет метод разработчика api getRDDStorageInfo () Иногда вы можете использовать это.
Возвращает информацию о том, какие RDD кэшируются, если они находятся в памяти или на диске, сколько места они занимают и т. д.
Например:
scala> sc.getRDDStorageInfo res3: Array[org.apache.spark.storage.RDDInfo] = Array(RDD "HiveTableScan [name#0], (MetastoreRelation sparkdb, firsttable, None), None " (3) StorageLevel: StorageLevel(false, true, false, true, 1); CachedPartitions: 1;
TotalPartitions: 1; MemorySize: 256.0 B; ExternalBlockStoreSize: 0.0 B; DiskSize: 0.0 B)
blockquote>Кажется, что искра ui также использовала то же самое из этого кода
- См. Этот источник SPARK-17019 , который описывает ...
Описание С SPARK-13992 Spark поддерживает сохраняющиеся данные в памяти кучи, но использование отключенной кучи в настоящее время не отображается, пользователю не так удобно контролировать и профиль, поэтому здесь предлагается выставить память кучи, а также использование памяти в куче в разных местах:
blockquote>
- На странице исполнителя Spark UI будет отображаться как использование памяти, так и куча памяти.
- Запрос REST возвращает как память, так и кучу памяти.
- Также эти два использования памяти могут быть получены программно из SparkListener.
MemorySize: 256.0 B
из sc.getRDDStorageInfo
– user2739472
8 August 2018 в 10:58
import org.apache.spark.util.SizeEstimator
не используется – mathieu 20 December 2017 в 18:14