使用Apache Spark和AWS从每日CSV文件生成每月数据

时间:2019-09-17 13:30:15

标签: amazon-web-services apache-spark amazon-athena aws-glue

我有CSV文件,这些文件的列相同,并且在2018年的每一天都有100万个匹配ID。每个ID都有5列,但ID除外。

我想按月连接文件,以使每个月度文件都有5列*天数,因此一月会有155个名为Day1-Col1,Day1-Col2 ... Day 31-Col5的文件。

我可以使用Apache Spark吗?

我之所以选择Spark,是因为我想将数据放入AWS Athena数据集中,而且AWS Glue似乎可以通过Spark SQL查询来做到这一点。

我想我们先将CSV转换为镶木地板文件,然后生成一个月度数据集,然后再通过AWS Quicksight可视化。

1 个答案:

答案 0 :(得分:1)

Spark将I / O与处理分开了一点。因此,我在这里尝试解决此问题。

首先,我将使用AWS Glue Catalog或Spark的本机wholeTextFiles方法加载csv文件。

从那里,您可以使用AWS Glue的DynamicFrame方法,Spark SQL的DataFrame方法,也可以使用Spark的RDD函数进行数据处理。在这种情况下,您的大部分处理工作似乎是根据一年中的月份按月对数据进行分组。使用RDD时,可以将groupBy方法与自定义函数结合使用,该函数根据年份返回月索引。同样,Spark SQL的Dataframe也具有groupBy方法。这里的另一种选择是循环遍历几个月,并根据一年中的某天到该月过滤记录。在某些方面,for循环更清洁,而在另一些方面则更脏。最后,执行此操作的第三种方法是向地图中的每个记录添加一个month字段。这样一来,您就可以按月份对数据进行分区,并且可能还需要年份。

最后,每个月退回的款项取决于您如何解决数据分组。如果您循环或添加了用于分区的月份字段,则可以使用AWS Glue目录将文件写出。如果您进行了groupBy,则需要对行进行计数,repartition要计算行数,然后使用Spark写入文件。