如何删除数据框中的空分区?

How to remove empty partition in a dataframe?

我需要从 Dataframe 中删除空分区

我们有两个 Dataframes,都是使用 sqlContext 创建的。数据帧的构造和组合如下

import org.apache.spark.sql.{SQLContext}

val sqlContext = new SQLContext(sc)

// Loading Dataframe 1
val csv1 = "s3n://xxxxx:xxxxxx@xxxx/xxx.csv"
val csv1DF = sqlContext.read.format("com.databricks.spark.csv").option("header", "true").load(csv1) 

// Loading Dataframe 2
val csv2 = "s3n://xxxxx:xxxxxx@xxxx/xxx.csv"
val csv2DF = sqlContext.read.format("com.databricks.spark.csv").option("header", "true").load(csv1) 

// Combining dataframes 
val combinedDF = csv1.
                join(csv2 csv1("column_1") === csv2("column_2"))

现在combinedDF分区数为200。 从here发现我们使用join时默认的分区数是200

在某些情况下,dataframe/csv 并不大,并且有很多空分区,这会导致代码后面的部分出现问题。

那么如何删除这些创建的空分区?

可以使用repartition方法创建一个没有空分区的RDD。

讨论了给定集群的最佳分区数。这是估算最佳分区数的良好经验法则。

number_of_partitions = number_of_cores * 4

如果您有一个包含 8 个 r3.xlarge AWS 节点的集群,您应该使用 128 个分区(8 个节点 * 每个节点 4 CPUs * 每个 CPU 4 个分区)。