情况如何? 我有一万个CSV文件(每个250kb - 270kb),我想用Spark(Pyspark精确地)处理。每个CSV文件都代表一个特定事件的过程数据。你可以说一个CSV文件代表一个对象。由于我想将数据存储在HDFS上,所以我必须找到连接数据的方式(因为在HDFS上存储大量微小数据效率不高)。如何在Hadoop HDFS上存储数千个CSV文件
一个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对象非常“大”,它不适合一条线。 有没有更好的方法可以继续?
感谢您的回答!由于数据将被拆分并分布在节点上,因此我没有考虑将csv作为选项,因此节点A可能具有部分事件A,而节点B具有事件A的其余部分。但实际上不是问题,我会尽力实现你的想法。 – Rob
有关在节点之间分割的特定事件的数据:通常对于您所描述的情况,这不会是一个问题;每个Event name/id的记录/观察数据量很低。您可能会对每组记录执行一些通用分析,并按事件名称/编号进行分组 - 在执行分组操作时,它将对同一个节点名称/编号对应的所有数据进行混洗并放置。 –