Apache Spark 如何在约3亿个JSON对象中高效地存储和聚合数据

vngu2lb8  于 2023-02-16  发布在  Apache
关注(0)|答案(1)|浏览(131)

我有一个应用程序,我收到3亿JSON文本文件(每天1000万,保留= 30天)从Kafka的主题。
它包含的数据需要基于不同的属性 * 每天 * 进行聚合。
我们希望使用Apache Spark和Azure数据库来构建它,因为数据的大小将不断增长,我们不能再垂直扩展这个过程(目前在1个Postgres服务器上运行),我们还需要一些经济高效的东西。
在ApacheSpark中完成这项工作理论上很简单,但是我还没有找到任何关于如何有效处理JSON对象的实用建议。
以下是我看到的选项:
1.将数据存储在Postgres中,并使用Spark作业(SQL)接收数据-传输数据可能会很慢
1.将数据以JSON格式存储在Azure Blob存储中-我们可能会用完可以存储的文件数量,而且读取这么多文件似乎效率低下
1.将JSON数据存储在大块中,例如,在一个文件中存储100.000个JSON-当数据更改时,删除/重新插入可能会很慢
1.将数据转换为CSV或某些具有固定结构的二进制格式,并将其以blob格式分块存储-更改格式将是一项挑战,但在未来将很少发生,而且CSV/二进制解析速度更快
任何实用的建议都将不胜感激。提前感谢。

n9vozmp4

n9vozmp41#

有多个因素需要考虑:
1.如果您尝试每天读取数据,那么强烈建议您将数据存储为Parquet格式并存储在数据库中。如果不每天访问数据,则存储在Azure存储桶中(计算成本将最小化)
1.如果JSON数据要被扁平化,那么您需要执行所有的数据操作,并使用OPTIMISE条件写入delta表。
1.如果真的保留30强制性的,那么要谨慎的文件格式bcz数据将增长指数每天的基础上。其他明智的Alter表属性与保留期为7天或15天。

相关问题