如何使用python存储、检索(和执行munging)大型csv文件?

mfuanj7w  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(426)

我有一个大的csv文件大小约5-6gb(百万行)。所以Pandas无法处理它(它给内存错误,因为我的ram容量是2gb)。我想在它上面使用hadoop(即,将每个文件的块存储在不同的节点上),那么从开始使用hadoop的方法是什么,我使用哪个hadoop数据库(hive、hbase、pig)在每个块上执行操作。如果有什么问题,那么请让我知道我是这个领域的初学者。或者我可以用sql或postgres来存储这个巨大的csv文件而不是hadoop如果可以,那么如何存储呢?谢谢您。

shstlldc

shstlldc1#

您可以像读取普通文本文件一样读取它,并按行分析行。你可以对它做任何治疗。
比如:

Header = []
with open( 'CSVFile.name' ], 'r') as InputFile:
  for Line in InputFile :
    PureData = re.split( Separator, Line[:-1])
    # assume 1st line is header
    if not Header :
      Header = PureData
    else :
      MyRecord = map( lambda x, y: { x, y }, Header, PureData)

      print( str( MyRecord))
tv6aics1

tv6aics12#

Pandas可以通过读取大块的文件来处理大文件。如果你提供 chunksize 参数 pd.read_csv() 函数,a TextFileReader 将被返回,您可以对它进行迭代,对内存中的每个卡盘执行操作。
下面是一个一次读取1000行并对每个块执行操作的示例:

reader = pd.read_csv('your_file.csv', chunksize=1000)
for chunk in reader:
    # do operations on chuck which is a dataframe with 1000 rows.

注意,在每个卡盘上执行的操作必须聚合或减小卡盘的大小,并且不要将它们存储在列表中,否则会耗尽内存。如果您需要对列执行操作,这样就不会减小 DataFrame ,然后在每个卡盘上操作后,将结果存储到文件中。

相关问题