Размер массива Scala by byte [duplicate]

Это можно решить в O (n), используя алгоритм объединения-поиска. При первых двух строках ваших данных края, используемые в объединении-нахождении, следующие пары: (0,1), (1,3), (1,0), (0,3), (3,4 ), (4,5), (5,10)

16
задан Alberto Bonsanto 27 July 2016 в 14:10
поделиться

3 ответа

Да Наконец я получил решение. Включите эти библиотеки.

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)
11
ответ дан Alberto Bonsanto 16 August 2018 в 01:32
поделиться
  • 1
    Если вы конвертируете фрейм данных в RDD, вы значительно увеличите его размер. Dataframe использует проектный вольфрам для более эффективного представления памяти. Если вы просто хотите получить представление о размерах, вы можете кэшировать как RDD, так и DataFrame (убедитесь, что материализуете кеширование, сделав подсчет на нем, например), а затем посмотрите под вкладкой хранилища пользовательского интерфейса. Обратите внимание, что в любом случае вы получаете размер в памяти, а не размер файла – Assaf Mendelson 20 September 2016 в 12:23
  • 2
    Этот ответ неверен. Преобразования в строку для вычисления размера не имеют никакого смысла. Кроме того, import org.apache.spark.util.SizeEstimator не используется – mathieu 20 December 2017 в 18:14
  • 3
    Это фактически даст вам размер плоского текстового файла, если вы будете хранить в нем фреймворк данных. Так что в значительной степени то, что я ищу. – Amit Kumar 25 June 2018 в 10:55

Если вы просто хотите подсчитать количество строк в 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

33
ответ дан Fokko Driesprong 16 August 2018 в 01:32
поделиться
  • 1
    Благодаря его работе, когда я импортировал этот импорт org.apache.spark.util.SizeEstimator, но не получил точное значение. Всегда около 43 МБ – Venu A Positive 28 January 2016 в 08:25
  • 2
    Да, хороший момент - я включил импорт в свой ответ :) – Glennie Helles Sindholt 28 January 2016 в 08:27
  • 3
    BTW, если все работает, можете ли вы затем поставить вопрос как ответ :) – Glennie Helles Sindholt 28 January 2016 в 09:13
  • 4
    Пожалуйста, найдите мою проблему здесь. sparkdeveloper.blogspot.in/2016/01/spark-solution-please.html – Venu A Positive 28 January 2016 в 12:36
  • 5
    О, я вижу, я пропустил «всегда около 43 МБ». Но если вас не интересует размер, который 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)

Кажется, что искра ui также использовала то же самое из этого кода

  • См. Этот источник SPARK-17019 , который описывает ...

Описание С SPARK-13992 Spark поддерживает сохраняющиеся данные в памяти кучи, но использование отключенной кучи в настоящее время не отображается, пользователю не так удобно контролировать и профиль, поэтому здесь предлагается выставить память кучи, а также использование памяти в куче в разных местах:

  1. На странице исполнителя Spark UI будет отображаться как использование памяти, так и куча памяти.
  2. Запрос REST возвращает как память, так и кучу памяти.
  3. Также эти два использования памяти могут быть получены программно из SparkListener.
4
ответ дан Ram Ghadiyaram 16 August 2018 в 01:32
поделиться
  • 1
    Я не вижу здесь, как вы получаете MemorySize: 256.0 B из sc.getRDDStorageInfo – user2739472 8 August 2018 в 10:58
Другие вопросы по тегам:

Похожие вопросы: