web-dev-qa-db-ja.com

spark RDD / Dataframeサイズを見つける方法

Scalaでファイルサイズを見つける方法は知っていますが、sparkでRDD /データフレームサイズを見つける方法は?

Scala:

object Main extends App {
  val file = new Java.io.File("hdfs://localhost:9000/samplefile.txt").toString()
  println(file.length)
}

スパーク:

val distFile = sc.textFile(file)
println(distFile.length)

しかし、処理するとファイルサイズが取得されません。 RDDサイズを見つける方法は?

26
Venu A Positive

はい最後に解決策を得ました。これらのライブラリを含めます。

import org.Apache.spark.sql.Row
import org.Apache.spark.rdd.RDD
import org.Apache.spark.rdd
import org.Apache.spark.util.SizeEstimator

RDDサイズの見つけ方:

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
Venu A Positive

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

以下はSizeEstimatorとは別の方法です。頻繁に使用します

RDDがキャッシュされているかどうか、より正確には、RDDについてのコードから、そのパーティションのうちいくつがメモリにキャッシュされ、いくつがディスクにキャッシュされているかを知るには?ストレージレベルを取得するには、現在の実際のキャッシュステータスも知りたい。メモリ消費量を知りたい。

Spark Contextには開発者APIメソッドがあります getRDDStorageInfo() 時々これを使用できます。

どのRDDがキャッシュされているか、memまたはディスク上にある場合、どのくらいのスペースを取るかなどの情報を返します。

例えば ​​:

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)

spark uiもこれと同じものを使用しているようです code

  • このソースの問題を参照してください SPARK-17019 説明しています...

説明
SPARK-13​​992では、Sparkがオフヒープメモリへのデータの永続化をサポートしますが、オフヒープの使用は現在公開されていません。そのため、ここでは、さまざまな場所でのオフヒープメモリとオンヒープメモリの使用量を公開することを提案します。

  1. Spark UIのエグゼキューターページには、ヒープ上のメモリ使用量とヒープ外のメモリ使用量の両方が表示されます。
  2. REST要求は、オンヒープメモリとオフヒープメモリの両方を返します。
  3. また、これら2つのメモリ使用量は、SparkListenerからプログラムで取得できます。
7
Ram Ghadiyaram