如何删除数据框中的空分区?
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 个分区)。
我需要从 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 个分区)。