为什么Spark DataFrame重新分区无法正常工作

时间:2017-03-24 09:13:04

标签: hadoop apache-spark apache-spark-sql spark-dataframe hortonworks-data-platform

Spark 1.6.2 HDP 2.5.2

我使用spark sql从hive表中获取数据,然后在具有100个分区的特定列“serial”上重新分区,但spark不会将数据重新分区为100个分区(可以看作是spark ui)代替了126个任务。

val data = sqlContext.sql("""select * from default.tbl_orc_zlib""")
val filteredData = data.filter( data("day").isNotNull ) // NULL check

//Repartition on serial column with 100 partitions
val repartData = filteredData.repartition(100,filteredData("serial")) 
val repartSortData = repartData.sortWithinPartitions("serial","linenr")

val mappedData = repartSortData.map(s => s.mkString("\t"))
val res = mappedData.pipe("xyz.dll")
res.saveAsTextFile("hdfs:///../../../")

但是如果我首先使用coalesce然后重新分区,则任务数量变为150(正确的50个coalesce和100个重新分区)

filteredData.coalesce(50)//works fine

有人可以解释一下为什么会发生这种情况

0 个答案:

没有答案