【发布时间】:2017-01-25 15:01:36
【问题描述】:
根据 Spark 1.6.3 的文档,repartition(partitionExprs: Column*) 应该保留结果数据帧中的分区数:
返回由给定分区划分的新 DataFrame 保留现有分区数的表达式
(取自https://spark.apache.org/docs/1.6.3/api/scala/index.html#org.apache.spark.sql.DataFrame)
但以下示例似乎显示了其他内容(请注意,在我的情况下 spark-master 是 local[4]):
val sc = new SparkContext(new SparkConf().setAppName("Demo").setMaster("local[4]"))
val sqlContext = new HiveContext(sc)
import sqlContext.implicits._
val myDF = sc.parallelize(Seq(1,1,2,2,3,3)).toDF("x")
myDF.rdd.getNumPartitions // 4
myDF.repartition($"x").rdd.getNumPartitions // 200 !
这怎么解释?我将 Spark 1.6.3 用作独立应用程序(即在 IntelliJ IDEA 中本地运行)
编辑:这个问题没有解决来自Dropping empty DataFrame partitions in Apache Spark 的问题(即如何在不产生空分区的情况下沿列重新分区),但为什么文档说的内容与我在示例中观察到的不同
【问题讨论】:
-
shuffle 参数设置为 true 吗?
-
@FaigB 不确定您指的是哪个参数?我在问题中添加了 Spark-Conf
标签: scala apache-spark