sparkDataframe的分区数?

xu3bshqb  于 2021-05-29  发布在  Spark
关注(0)|答案(2)|浏览(763)

我有一个sparkDataframe(spark2.3),它存储一个没有记录的sql。当我尝试计算分区数时,它没有显示任何结果,并且尝试了各种函数,如df.rdd.getnumpartitions/df.rdd.getnumpartitions()/df.rdd.length/df.rdd.partitions.size。
如何从一个sparkDataframe中获得零条或数百万条记录的分区数?
代码:

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'
csbfibhn

csbfibhn1#

具有零记录的Dataframe的分区数取决于sparksession对象的示例化方式。
如果我用下面给出的config构建sparksession对象,那么即使一个Dataframe没有记录,我也会得到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
bqf10yzr

bqf10yzr2#

试一试,假设Pypark:

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()

退货:

Out[6]: 0

此外:

df.registerTempTable('XXX')
yyy = spark.sql("select * from XXX")
yyy.rdd.getNumPartitions()

产量:

Out[11]: 0

相关问题