【问题标题】:Best way to read a large csv (10gb) and after computation store the data in db读取大型 csv (10gb) 并在计算后将数据存储在 db 中的最佳方法
【发布时间】:2015-05-31 10:57:36
【问题描述】:

我有大约 4gb 的文本文件,我会对其进行解析并将数据保存在数据库中。这个过程几乎需要 3-4 小时(5-6 百万行)来处理和保存数据库中的数据。这是一个日常过程。

现在,当我查询数据库时,它会花费太多时间来计算结果并返回。就像我对某一天做一个简单的 avg, sum 运算需要 30-40 分钟。

我现在正在使用python,mysql。尝试 Spark 也做这个计算也需要 30-40 分钟,现在数据在增加,所以文件大小会增加,它会像 10gb,spark 无法处理大文件。

请建议我如何改进解析、存储在数据库中和获取时间的时间。

【问题讨论】:

  • 您是否尝试过 Hadoop 或类似的 map-reduce 方法来并行处理您的数据?
  • 我使用 Spark 因为一些在线讨论我发现它比 Hadoop 更好,databricks.com/blog/2014/10/10/spark-petabyte-sort.html不确定 Hadoop 或 map reduce。
  • 您可以使用github.com/databricks/spark-csv 来加载您的CSV 文件。如果您使用 DataFrame API,与使用 Python 的普通 API 相比,您应该会看到相当不错的性能提升。
  • “spark 无法处理大文件” 这是错误的。 Spark 是专门用于处理大数据的解决方案。您刚刚链接到一个排序 1 PB 的帖子。

标签: performance apache-spark database-tuning large-data


【解决方案1】:

我不知道你使用的是什么数据库,但也许你可以切换?

我建议使用 Impala + AVRO 架构。您可能需要使用 HIVE 刷新/创建表,因为 Impala 在管理区域中缺少一些功能。

我用它在 HDFS 上存储文件并进行分组,然后在 4 台机器上合计 45GB 的浮点数花了我大约 40 秒。您无需花时间将任何内容放入数据库,因为源是文件本身。您所需要的只是将文件存储在 HDFS 中,但它与任何 FS 一样快。

【讨论】:

    猜你喜欢
    • 2015-03-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多