仅使用开源工具从Python查找和计算SAS7BDAT文件中的记录总数
我有一些sas7dat文件,包含数亿行,大约100GB-1000GB。我希望能够有效地做到以下几点:仅使用开源工具从Python查找和计算SAS7BDAT文件中的记录总数,python,pandas,sas,Python,Pandas,Sas,我有一些sas7dat文件,包含数亿行,大约100GB-1000GB。我希望能够有效地做到以下几点: 计算文件中的记录数 试图记录 是否有任何方法可以通过pandas.read_sas界面实现这一点?我希望避免使用SAS本身。读入文件并使用.shape确定行数 import pandas as pd df = pd.read_sas('filename.sas7bdat') df.shape[0] 无法有效地读取文件并执行您希望使用pandas执行的操作。这里有一条出路- 使用chunksi
是否有任何方法可以通过
pandas.read_sas
界面实现这一点?我希望避免使用SAS本身。读入文件并使用.shape确定行数
import pandas as pd
df = pd.read_sas('filename.sas7bdat')
df.shape[0]
无法有效地读取文件并执行您希望使用pandas
执行的操作。这里有一条出路-
使用chunksize
参数可以发挥您的优势-
CHUNKSIZE = 1e6
rows = 0
for df in pd.read_sas('path/to/sas/filename.sas7bdat', chunksize=CHUNKSIZE, iterator=True):
rows += df.shape[0]
# whatever else you want
解释
它一次读取一百万行(根据您能负担的RAM的多少来改变chunksize
),并迭代计算您想要的内容。或者,您也可以使用它执行其他df
相关操作,只要您不断累积它们
警告
在商品硬件上,试图读取~100 GBs的数据,仍然是低效的。我找到了答案!但答案是不使用熊猫,这就是为什么我改变了标题 有一个问题。(它是用Scala编写的)。“当输入未压缩时,此格式是可拆分的,因此可以实现大型SAS文件的高度并行性…由于可拆分的SASIInputFormat,我们能够在2分钟内使用2000个执行器将200GB(15亿行).sas7bdat文件转换为.csv文件。” 使用此代码,计算行数的有效方法是:
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
df = sqlContext.read.format("com.github.saurfang.sas.spark").load("input.sas7bdat")
print("Number of rows in input.sas7bdat: {}".format(df.count()))
在SAS中,它将是一个libname语句和一个快速SQL查询-无需再次读取文件。但这可能意味着它也存在于文件元数据的某个地方,它只是一个如何访问信息的问题。我没有足够的技能来解决这个问题,但我建议查看Chris Hemedinger的博客和关于使用其他工具访问SAS数据集的文章。SAS也在尝试更好地使用python。SAS中的解决方案是4行代码,如果需要,请告诉我。谢谢!是的,SAS解决方案有4行代码。不过,我需要一个python解决方案,因为我们不使用SAS。我们在SAS中有遗留数据。我们对.sas7dat文件格式的了解:因此其中一个未知的可能就是您所需要的。另一个选项是,SAS Universal Viewer是免费的,可以访问SAS数据集,如果这是一次性任务,它应该能够为您获取该信息,如果不是,则需要不同的解决方案。是的,我可以使用SAS Universal Viewer,但它不在我的Mac上运行…谢谢,但这不是有效的,因为它需要读取整个文件。我的文件放不进内存;我的文件大小为100GB到1000GB。我没有一台有2-5 TB内存的机器。