2017-04-03 191 views
0

我想按年/月/日划分数据帧。我还想删除任何空白分区,并将输出保存在我的本地计算机下,如年/月/日等文件夹下。Spark如何根据年份和月份划分数据帧

我已经尝试了以下,但它仍然创建200奇怪的分区。

val sqldf = spark.sql("SELECT year(EventDate) AS Year_EventDate, month(EventDate) as Month_EventDate FROM table CLUSTER BY Year_EventDate,Month_EventDate") 


sqldf.write.format("com.databricks.spark.csv").option("header", "true").mode("overwrite").save(destinationFolder) 

回答

0

你得到200的原因(我猜是正确的?)分区是因为这是Spark中任务的默认并行度。根据数据的大小,如果需要,可以将其合并为更少的分区。

saldf.coalesce(10) 

要写入所需的文件夹,你应该首先重新分区的数据到你喜欢的文件夹,然后通过暗示,作家

sqldf.repartition($"year", $"month", $"day").write.format("com.databricks.spark.csv").option("header", "true").mode("overwrite").partitionBy("year", "month", "day").save(destinationFolder) 

确保列年,月,白天是你想要给他们的任何名字,并且是你数据中的列。

+0

它为我工作。谢谢 – jane