Ven*_*ive 28 scala apache-spark rdd
我知道如何在scala中找到文件大小.但是如何在spark中找到RDD/dataframe大小?
斯卡拉:
object Main extends App {
val file = new java.io.File("hdfs://localhost:9000/samplefile.txt").toString()
println(file.length)
}
Run Code Online (Sandbox Code Playgroud)
火花:
val distFile = sc.textFile(file)
println(distFile.length)
Run Code Online (Sandbox Code Playgroud)
但如果我处理它没有获得文件大小.如何找到RDD大小?
Gle*_*olt 49
如果您只想查看其中的行数rdd,请执行以下操作:
val distFile = sc.textFile(file)
println(distFile.count)
Run Code Online (Sandbox Code Playgroud)
如果您对字节感兴趣,可以使用SizeEstimator:
import org.apache.spark.util.SizeEstimator
println(SizeEstimator.estimate(distFile))
Run Code Online (Sandbox Code Playgroud)
https://spark.apache.org/docs/latest/api/java/org/apache/spark/util/SizeEstimator.html
Ven*_*ive 11
是的,最后我得到了解决方案.包括这些库.
import org.apache.spark.sql.Row
import org.apache.spark.rdd.RDD
import org.apache.spark.rdd
Run Code Online (Sandbox Code Playgroud)
如何找到RDD大小:
def calcRDDSize(rdd: RDD[String]): Long = {
rdd.map(_.getBytes("UTF-8").length.toLong)
.reduce(_+_) //add the sizes together
}
Run Code Online (Sandbox Code Playgroud)
查找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)
Run Code Online (Sandbox Code Playgroud)
以下是一种方式SizeEstimator.我经常使用
从代码中了解一下RDD是否被缓存,更确切地说,有多少分区被缓存在内存中以及有多少缓存在磁盘上?获取存储级别,也想了解当前的实际缓存状态.了解内存消耗情况.
Spark Context有开发人员api方法getRDDStorageInfo() 偶尔你可以使用它.
返回有关哪些RDD被缓存的信息,如果它们在mem或磁盘上,它们占用了多少空间等.
例如 :
Run Code Online (Sandbox Code Playgroud)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请求返回堆内和堆外内存.
- 这两个内存使用也可以通过SparkListener以编程方式获得.
| 归档时间: |
|
| 查看次数: |
64586 次 |
| 最近记录: |