我正在处理结构化数据(每个字段一个值,每行相同的字段),我必须使用 Spark(作为分析工具)和 Hadoop 将其放入 NoSql 环境中。虽然,我想知道使用什么格式。我在考虑 json 或 csv,但我不确定。你怎么看,为什么?我在这个领域没有足够的经验来做出正确的决定。
第二个问题:我必须分析这些数据(存储在 HDFS 中)。因此,据我所知,我有两种可能性来查询它们(在分析之前):
直接读取和过滤。我的意思是它可以用 Spark 来完成,例如:
data = sqlCtxt.read.json(path_data)
使用Hbase/Hive正确查询,然后处理数据。
所以,我不知道做这一切的标准方法是什么,最重要的是,什么是最快的。 提前谢谢你!
最佳答案
使用 Parquet 。我不确定 CSV,但绝对不要使用 JSON。我个人使用带有 spark 的 JSON 的体验非常非常慢,从存储中读取数据非常慢,在切换到 Parquet 后我的读取时间快得多(例如,一些小文件需要几分钟才能加载到压缩的 JSON 中,现在加载它们只需要不到一秒的时间压缩 Parquet )。
除了提高读取速度之外,压缩的 parquet 在读取时可以通过 spark 进行分区,而压缩的 JSON 则不能。这意味着 Parquet 可以加载到多个集群 worker 上,而 JSON 只会被读取到具有 1 个分区的单个节点上。如果您的文件很大并且您会遇到内存不足异常,这不是一个好主意。它也不会并行化您的计算,因此您将在一个节点上执行。这不是“Sparky”做事的方式。
最后一点:您可以使用 SparkSQL 对存储的 Parquet 文件执行查询,而不必先将它们读入数据帧。非常方便。
希望这有帮助:)
关于hadoop - 数据格式和数据库选择 Spark/hadoop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47347948/