Spark如何根据年份和月份

时间:2017-04-03 16:54:01

标签: apache-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)

1 个答案:

答案 0 :(得分: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)

确保列年,月,日是您想要提供的名称,并且是数据中的列。