【问题标题】:How to remove empty partition in a dataframe?如何删除数据框中的空分区?
【发布时间】:2015-10-10 16:35:48
【问题描述】:

我需要从 Dataframe 中删除空分区

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

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

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

【问题讨论】:

  • 你可以repartition你的数据框。
  • 我需要为重新分区提供什么尺寸?
  • @user52045 对于重新分区,我必须提供新的分区大小。但是在运行时很难找到完美的尺寸。对我来说,我认为只需删除空分区就可以了。

标签: apache-spark apache-spark-sql spark-dataframe


【解决方案1】:

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

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

number_of_partitions = number_of_cores * 4

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-28
    • 2023-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 2014-12-30
    • 2020-10-05
    • 1970-01-01
    相关资源
    最近更新 更多