我有一个大的csv文件大小约5-6gb(百万行)。所以Pandas无法处理它(它给内存错误,因为我的ram容量是2gb)。我想在它上面使用hadoop(即,将每个文件的块存储在不同的节点上),那么从开始使用hadoop的方法是什么,我使用哪个hadoop数据库(hive、hbase、pig)在每个块上执行操作。如果有什么问题,那么请让我知道我是这个领域的初学者。或者我可以用sql或postgres来存储这个巨大的csv文件而不是hadoop如果可以,那么如何存储呢?谢谢您。
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))
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))
tv6aics12#
Pandas可以通过读取大块的文件来处理大文件。如果你提供 chunksize 参数 pd.read_csv() 函数,a TextFileReader 将被返回,您可以对它进行迭代,对内存中的每个卡盘执行操作。下面是一个一次读取1000行并对每个块执行操作的示例:
chunksize
pd.read_csv()
TextFileReader
reader = pd.read_csv('your_file.csv', chunksize=1000)for chunk in reader: # do operations on chuck which is a dataframe with 1000 rows.
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 ,然后在每个卡盘上操作后,将结果存储到文件中。
DataFrame
2条答案
按热度按时间shstlldc1#
您可以像读取普通文本文件一样读取它,并按行分析行。你可以对它做任何治疗。
比如:
tv6aics12#
Pandas可以通过读取大块的文件来处理大文件。如果你提供
chunksize
参数pd.read_csv()
函数,aTextFileReader
将被返回,您可以对它进行迭代,对内存中的每个卡盘执行操作。下面是一个一次读取1000行并对每个块执行操作的示例:
注意,在每个卡盘上执行的操作必须聚合或减小卡盘的大小,并且不要将它们存储在列表中,否则会耗尽内存。如果您需要对列执行操作,这样就不会减小
DataFrame
,然后在每个卡盘上操作后,将结果存储到文件中。