如何在pyspark中查找数据帧的大小

如何在pyspark中查找数据帧的大小,pyspark,apache-spark-sql,Pyspark,Apache Spark Sql,如何复制此代码以获得pyspark中的数据帧大小 scala> val df = spark.range(10) scala> print(spark.sessionState.executePlan(df.queryExecution.logical).optimizedPlan.stats) Statistics(sizeInBytes=80.0 B, hints=none) 我想做的是将sizeInBytes值放入一个变量。在Spark 2.4中,您可以这样做 df = sp

如何复制此代码以获得pyspark中的数据帧大小

scala> val df = spark.range(10)
scala> print(spark.sessionState.executePlan(df.queryExecution.logical).optimizedPlan.stats)
Statistics(sizeInBytes=80.0 B, hints=none)

我想做的是将sizeInBytes值放入一个变量。

在Spark 2.4中,您可以这样做

df = spark.range(10)
df.createOrReplaceTempView('myView')
spark.sql('explain cost select * from myView').show(truncate=False)

|== Optimized Logical Plan ==
Range (0, 10, step=1, splits=Some(8)), Statistics(sizeInBytes=80.0 B, hints=none)
在Spark 3.0.0-preview2中,您可以使用成本模式下的
解释

df = spark.range(10)
df.explain(mode='cost')

== Optimized Logical Plan ==
Range (0, 10, step=1, splits=Some(8)), Statistics(sizeInBytes=80.0 B)

在Spark 2.4中,您可以

df = spark.range(10)
df.createOrReplaceTempView('myView')
spark.sql('explain cost select * from myView').show(truncate=False)

|== Optimized Logical Plan ==
Range (0, 10, step=1, splits=Some(8)), Statistics(sizeInBytes=80.0 B, hints=none)
在Spark 3.0.0-preview2中,您可以使用成本模式下的
解释

df = spark.range(10)
df.explain(mode='cost')

== Optimized Logical Plan ==
Range (0, 10, step=1, splits=Some(8)), Statistics(sizeInBytes=80.0 B)
看看这有什么帮助-

读取json文件源代码并计算统计数据,如字节大小、行数等。此统计数据还将帮助spark在优化执行计划时做出智能决策此代码在
pyspark
中也应相同

/**
*文件内容
*spark-test-data.json
* --------------------
*{“id”:1,“name”:“abc1”}
*{“id”:2,“name”:“abc2”}
*{“id”:3,“name”:“abc3”}
*/
val fileName=“spark test data.json”
val path=getClass.getResource(“/”+文件名).getPath
createTable(“df”,路径,“json”)
.show(假)
/**
* +---+----+
*| id |名称|
* +---+----+
*| 1 | abc1|
*| 2 | abc2|
*| 3 | abc3|
* +---+----+
*/
//仅收集不需要扫描整个表的统计信息(即,以字节为单位的大小)。
sql(“分析表df计算统计数据NOSCAN”)
spark.sql(“描述扩展df”).filter(col(“col_name”)==“Statistics”).show(false)
/**
* +----------+---------+-------+
*|颜色名称|数据类型|注释|
* +----------+---------+-------+
*|统计| 68字节||
* +----------+---------+-------+
*/
sql(“分析表df计算统计数据”)
spark.sql(“描述扩展df”).filter(col(“col_name”)==“Statistics”).show(false)
/**
* +----------+----------------+-------+
*|颜色名称|数据类型|注释|
* +----------+----------------+-------+
*|统计数据| 68字节,3行||
* +----------+----------------+-------+
*/
更多信息-

请参阅本帮助的一部分-

读取json文件源代码并计算统计数据,如字节大小、行数等。此统计数据还将帮助spark在优化执行计划时做出智能决策此代码在
pyspark
中也应相同

/**
*文件内容
*spark-test-data.json
* --------------------
*{“id”:1,“name”:“abc1”}
*{“id”:2,“name”:“abc2”}
*{“id”:3,“name”:“abc3”}
*/
val fileName=“spark test data.json”
val path=getClass.getResource(“/”+文件名).getPath
createTable(“df”,路径,“json”)
.show(假)
/**
* +---+----+
*| id |名称|
* +---+----+
*| 1 | abc1|
*| 2 | abc2|
*| 3 | abc3|
* +---+----+
*/
//仅收集不需要扫描整个表的统计信息(即,以字节为单位的大小)。
sql(“分析表df计算统计数据NOSCAN”)
spark.sql(“描述扩展df”).filter(col(“col_name”)==“Statistics”).show(false)
/**
* +----------+---------+-------+
*|颜色名称|数据类型|注释|
* +----------+---------+-------+
*|统计| 68字节||
* +----------+---------+-------+
*/
sql(“分析表df计算统计数据”)
spark.sql(“描述扩展df”).filter(col(“col_name”)==“Statistics”).show(false)
/**
* +----------+----------------+-------+
*|颜色名称|数据类型|注释|
* +----------+----------------+-------+
*|统计数据| 68字节,3行||
* +----------+----------------+-------+
*/

更多信息-

通常,您可以通过py4j访问scala方法。我刚刚在pyspark外壳中尝试过:

>>> spark._jsparkSession.sessionState().executePlan(df._jdf.queryExecution().logical()).optimizedPlan().stats().sizeInBytes()
716

通常,您可以通过py4j访问scala方法。我刚刚在pyspark外壳中尝试过:

>>> spark._jsparkSession.sessionState().executePlan(df._jdf.queryExecution().logical()).optimizedPlan().stats().sizeInBytes()
716

如何将sizeInBytes放入变量?@DinoG好吧,将其放入变量将更为棘手,但您始终可以解析字符串
spark.sql(解释成本…).collect()[0]['plan']
,这将不太好,但这当然是有可能的,它似乎可以工作,但不如下面的代码整洁,可以在scala
spark.sessionState.executePlan(df.queryExecution.logical)、optimizedPlan.stats.sizeInBytes
中使用。如何在Pyspark中复制此代码?如何将大小字节转换为变量?@DinoG好吧,将其转换为变量将更为棘手,但您始终可以解析字符串
spark.sql(解释成本…).collect()[0]['plan']
,这将不美观,但这当然是有可能的,它似乎可以工作,但不如下面的代码整洁,可以在scala
spark.sessionState.executePlan(df.queryExecution.logical)、optimizedPlan.stats.sizeInBytes
中使用。我如何在Pyspark中复制这段代码?本质上,我是在尝试从Optimize中计算数据帧的大小,如:-val sizeInBytes=spark.sessionState.executePlan(df.queryExecution.logical).optimizedPlan.stats.sizeInBytes通常我会尝试从Optimize中计算出数据帧的大小,如下:-val sizeInBytes=spark.sessionState.executePlan(df.queryExecution.logical)。optimizedPlan.stats.sizeInBytes