我正在处理结构化数据(每个字段有一个值,每行有相同的字段),这些数据必须放在nosql环境中,使用spark(作为分析工具)和hadoop。不过,我想知道该用什么格式。我在考虑json或csv,但我不确定。你怎么想?为什么?我在这个领域没有足够的经验来做出正确的决定。
第二个问题:我必须分析这些数据(存储在hdfs中)。因此,据我所知,我有两种可能来查询它们(在分析之前):
直接读取和过滤。我的意思是可以用spark来完成,例如:
data = sqlCtxt.read.json(path_data)
使用hbase/hive正确地进行查询,然后处理数据。
所以,我不知道做这一切的标准方法是什么,最重要的是,最快的方法是什么。提前谢谢!
1条答案
按热度按时间uttx8gqw1#
使用Parquet地板。我不确定csv,但肯定不使用json。我个人的经验是,使用json和spark从存储中读取非常非常慢,在切换到parquet之后,我的读取时间要快得多(例如,一些小文件在压缩json中加载需要几分钟,现在在压缩parquet中加载不到一秒钟)。
除了提高读取速度之外,压缩的parquet可以在读取时通过spark进行分区,而压缩的json则不能。这意味着parquet可以加载到多个集群worker上,而json只能读取到一个具有1个分区的节点上。如果您的文件很大,并且会出现内存不足的异常,那么这不是一个好主意。它也不会并行计算,所以只能在一个节点上执行。这不是一种“有Spark”的做事方式。
最后一点:您可以使用sparksql对存储的parquet文件执行查询,而不必首先将它们读入dataframes。非常方便。
希望这有帮助:)