火花数据帧的分区数?
Number of partitions of a spark dataframe?
我有一个 spark 数据框 (Spark 2.3),它存储了一个 sql,其中有零条记录。当我尝试计算分区数时,它没有显示任何结果,并尝试了各种函数,例如 df.rdd.getNumPartitions / df.rdd.getNumPartitions()/ df.rdd.length / df.rdd.partitions.size.
如何从具有零个或数百万条记录的 spark 数据帧中获取分区数?
代码:
empsql = 'Select * From Employee' ## In this sql it has zero records
df = spark.sql(empsql) ##Spark is configured
df.rdd.getNumPartitions
#Using df.rdd.partitions.size got error as: AttributeError: 'RDD' object has no attribute 'partitions'
尝试,假设 pyspark:
df.rdd.getNumPartitions()
通过应该等同于空查询的空 DF 进行模拟:
from pyspark.sql.types import *
field = [StructField("FIELDNAME_1",StringType(), True),StructField("FIELDNAME_2", StringType(), True), StructField("FIELDNAME_3", StringType(), True)]
schema = StructType(field)
df = sqlContext.createDataFrame(sc.emptyRDD(), schema)
df.rdd.getNumPartitions()
returns:
Out[6]: 0
此外:
df.registerTempTable('XXX')
yyy = spark.sql("select * from XXX")
yyy.rdd.getNumPartitions()
产量:
Out[11]: 0
具有零记录的数据帧的分区数取决于 SparkSession 对象的实例化方式。
在这种情况下,如果我使用如下给出的配置构建 SparkSession 对象,我最终会为一个数据帧获得 4 个分区,即使它有零记录。
证明这一点的Scala代码片段-
val spark = SparkSession.builder()
.appName(this.getClass.getName)
.config("spark.master", "local[4]").getOrCreate()
import org.apache.spark.sql.types._
val data = Seq(("first","row"),("second","row"))
val df = spark.createDataFrame(spark.sparkContext.parallelize(data))
val zeroRowDF = df.filter(col("_1") === lit(“third”))
zeroRowDF.count —> it returns ZERO
zeroRowDF.rdd.getNumPartitions —> it returns 4
我有一个 spark 数据框 (Spark 2.3),它存储了一个 sql,其中有零条记录。当我尝试计算分区数时,它没有显示任何结果,并尝试了各种函数,例如 df.rdd.getNumPartitions / df.rdd.getNumPartitions()/ df.rdd.length / df.rdd.partitions.size.
如何从具有零个或数百万条记录的 spark 数据帧中获取分区数?
代码:
empsql = 'Select * From Employee' ## In this sql it has zero records
df = spark.sql(empsql) ##Spark is configured
df.rdd.getNumPartitions
#Using df.rdd.partitions.size got error as: AttributeError: 'RDD' object has no attribute 'partitions'
尝试,假设 pyspark:
df.rdd.getNumPartitions()
通过应该等同于空查询的空 DF 进行模拟:
from pyspark.sql.types import *
field = [StructField("FIELDNAME_1",StringType(), True),StructField("FIELDNAME_2", StringType(), True), StructField("FIELDNAME_3", StringType(), True)]
schema = StructType(field)
df = sqlContext.createDataFrame(sc.emptyRDD(), schema)
df.rdd.getNumPartitions()
returns:
Out[6]: 0
此外:
df.registerTempTable('XXX')
yyy = spark.sql("select * from XXX")
yyy.rdd.getNumPartitions()
产量:
Out[11]: 0
具有零记录的数据帧的分区数取决于 SparkSession 对象的实例化方式。
在这种情况下,如果我使用如下给出的配置构建 SparkSession 对象,我最终会为一个数据帧获得 4 个分区,即使它有零记录。
证明这一点的Scala代码片段-
val spark = SparkSession.builder()
.appName(this.getClass.getName)
.config("spark.master", "local[4]").getOrCreate()
import org.apache.spark.sql.types._
val data = Seq(("first","row"),("second","row"))
val df = spark.createDataFrame(spark.sparkContext.parallelize(data))
val zeroRowDF = df.filter(col("_1") === lit(“third”))
zeroRowDF.count —> it returns ZERO
zeroRowDF.rdd.getNumPartitions —> it returns 4