Spark 数据帧的分区数?

K.T*_*Tom 2 dataframe apache-spark rdd apache-spark-sql pyspark

我有一个 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'
Run Code Online (Sandbox Code Playgroud)

the*_*tom 6

尝试一下,假设 pyspark:

df.rdd.getNumPartitions()
Run Code Online (Sandbox Code Playgroud)

通过空 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()
Run Code Online (Sandbox Code Playgroud)

返回:

Out[6]: 0
Run Code Online (Sandbox Code Playgroud)

而且:

df.registerTempTable('XXX')
yyy = spark.sql("select * from XXX")
yyy.rdd.getNumPartitions()
Run Code Online (Sandbox Code Playgroud)

产量:

Out[11]: 0
Run Code Online (Sandbox Code Playgroud)