gpt4 book ai didi

json - 如何在 Hadoop HDFS 上存储数千个 CSV 文件

转载 作者:可可西里 更新时间:2023-11-01 14:51:25 26 4
gpt4 key购买 nike

情况如何?我有上万个 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 对象如此“大”,一行都放不下。 有更好的方法吗?

最佳答案

通常,您不希望在 HDFS 中存储许多小文件——小文件的大小 < ~64-128MB。

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

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

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

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

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

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

关于json - 如何在 Hadoop HDFS 上存储数千个 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46825442/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com