【问题标题】:How to store thousands of CSV files on Hadoop HDFS如何在 Hadoop HDFS 上存储数千个 CSV 文件
【发布时间】:2018-03-31 05:29:22
【问题描述】:

情况如何? 我有一万个 CSV 文件(每个 250kb - 270kb),我想使用 Spark(准确地说是 Pyspark)处理它们。每个 CSV 文件代表一个特定事件的过程数据。您可以说一个 CSV 文件代表一个对象。由于我想将数据存储在 HDFS 上,我必须找到一种连接数据的方法(因为在 HDFS 上存储大量微小数据效率低下)。

一个 CSV 文件的片段(简化)。

Time        Module  v1   v2      v3     v4  v5   v6      v7     v8
00:00:00    Start   0   26,2    26,0    0   0   25,899  25,7    0
00:00:06    2: M1   0   26,1    26,2    0   0   25,8    25,899  0
00:01:06    2: M1   0   26,6    26,6    0   0   26,8    26,799  0
00:02:05    2: M1   0   27,1    27,0    0   0   27,7    27,7    0
00:03:06    2: M1   0   27,3    27,5    0   0   28,1    28,1    0

完整的数据有 45-50 列和大约 1000 行。

到目前为止我的想法。 我正在考虑将每个 CSV 转换为一个 JSON 对象,然后连接 JSON 对象,如下所示

{
 "Event": "MLV14092",
 "Values": [
  {
   "Time": "00:00:00",
   "Module": "Start",
   "v1": "33.299"
   ...
  },
  {
   "Time": "00:00:06",
   "Module": "2: M1",
   "v1": "33.4"
   ... 
  }
 ]
}

问题。 这是一种有效的方法吗?我对 Hadoop 环境比较陌生,我已经完成了一些关于 JSON 文件的教程。然而,在那些教程中,我总是能够在一行中存储一个 JSON 对象,因此我不必担心 HDFS 会在哪一行拆分文件。一个 JSON 对象如此“大”,它不会放在一行中。 有更好的方法吗?

【问题讨论】:

    标签: json csv hadoop pyspark hdfs


    【解决方案1】:

    通常,您不希望在 HDFS 中存储许多小文件——小文件的大小

    根据您的描述,“事件”名称/ID 看起来也很重要,但它不是现有 csv 文件的一部分(即它在文件名中,但不在文件中)。

    鉴于文件的大小和数量仍然不是很大,您是否考虑过编写一个小的 shell 或 Python 脚本来执行以下操作:

    • 从每个 csv 中删除标题
    • 在每个包含“事件”名称/id 的 csv 中添加/附加一列
    • 将结果存储在新文件中

    您可以将脚本应用于每个文件,这将为您提供转换后的输出文件。 (您的脚本也可以批量处理整个文件集或文件子集)

    然后您可以连接转换后的输出文件并将连接的文件存储在 HDFS 中。连接的文件将节省空间、以行分隔,并且非常适合使用 PySpark/Spark 和 Hive 等工具进行探索和分析。

    另外,对于此类分析,有比 CSV 更优化的文件格式,但请考虑在这组初始步骤之后探索列式文件格式主题。对于 Spark,您可能希望稍后以 Parquet 格式存储此数据,而对于 Hive,则以 ORC 格式存储。您可以使用完全相同的工具将数据转换为这些格式。

    【讨论】:

    • 感谢您的回答!我不认为 csv 是一个选项,因为数据将被拆分并分布在节点上,因此节点 A 可能具有事件 A 的一部分,而节点 B 具有事件 A 的其余部分。但这实际上不是问题,我会尽力实现你的想法。
    • 关于特定事件的数据在节点之间拆分:通常对于您所描述的情况,这不会成为问题;每个事件名称/ID 的记录/观察数据量很低。您可能会对按事件名称/id 分组的每组记录执行一些常见的分析——在执行该分组操作时,它会将与相同事件名称/id 对应的所有数据打乱并放置在同一节点上。跨度>
    猜你喜欢
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    相关资源
    最近更新 更多