1

我需要从 Dataframe 中删除空分区

我们有两个数据框,都是使用 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。从这里发现我们使用join时默认的分区数是200。

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

那么我怎样才能删除这些创建的空分区呢?

4

1 回答 1

2

repartition方法可用于创建没有任何空分区的 RDD。

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

number_of_partitions = number_of_cores * 4

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

于 2016-12-05T15:59:23.733 回答