Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dataframe spark数据帧的分区数?_Dataframe_Apache Spark_Pyspark_Apache Spark Sql_Rdd - Fatal编程技术网

Dataframe spark数据帧的分区数?

Dataframe spark数据帧的分区数?,dataframe,apache-spark,pyspark,apache-spark-sql,rdd,Dataframe,Apache Spark,Pyspark,Apache Spark Sql,Rdd,我有一个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

我有一个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()
返回:

Out[6]: 0
此外:

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

Out[11]: 0

具有零记录的数据帧的分区数取决于SparkSession对象的实例化方式

若我使用下面给出的配置构建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

皮斯帕克一号presume@thebluephantom对这是pysparktry的答案请…我尝试了df.rdd.getNumPartitions(),但没有得到任何结果。在第二个解决方案中,我使用了SQL,它大约有145列。对我来说很好。再次检查。它应该独立于源代码工作。