hadoop - 数据格式和数据库选择 Spark/hadoop

标签 hadoop apache-spark hive hbase dataformat

我正在处理结构化数据(每个字段一个值,每行相同的字段),我必须使用 Spark(作为分析工具)和 Hadoop 将其放入 NoSql 环境中。虽然,我想知道使用什么格式。我在考虑 json 或 csv,但我不确定。你怎么看,为什么?我在这个领域没有足够的经验来做出正确的决定。

第二个问题:我必须分析这些数据(存储在 HDFS 中)。因此,据我所知,我有两种可能性来查询它们(在分析之前):

  1. 直接读取和过滤。我的意思是它可以用 Spark 来完成,例如:

    data = sqlCtxt.read.json(path_data)
    
  2. 使用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/

相关文章:

Regex SerDe 不支持 serialize() 方法错误

sql - 选择配置单元中的下一个非空字段

java - 如何修复 jar 文件的 Spark-Submit 中的日志记录和版本兼容性

google-cloud-platform - 将 hive 分区的 ORC 数据加载到 bigquery

hadoop - 使用 pig 从数据文件中删除坏数据

hadoop - hive 查询速度慢,为什么(左半连接)?

Python Spark 如何使用 RDD API 按组查找累计和

apache-spark - 当我在 Windows 7 中运行 `first` 或 `take` 方法时,pyspark 崩溃

java.lang.OutOfMemoryError : Java heap space with hive 错误

flutter - 如何将数据从workmananger的isolate发送到主isolate?