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サイズを見つける方法は?
はい最後に解決策を得ました。これらのライブラリを含めます。
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)
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-13992では、Sparkがオフヒープメモリへのデータの永続化をサポートしますが、オフヒープの使用は現在公開されていません。そのため、ここでは、さまざまな場所でのオフヒープメモリとオンヒープメモリの使用量を公開することを提案します。
- Spark UIのエグゼキューターページには、ヒープ上のメモリ使用量とヒープ外のメモリ使用量の両方が表示されます。
- REST要求は、オンヒープメモリとオフヒープメモリの両方を返します。
- また、これら2つのメモリ使用量は、SparkListenerからプログラムで取得できます。