Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅使用开源工具从Python查找和计算SAS7BDAT文件中的记录总数_Python_Pandas_Sas - Fatal编程技术网

仅使用开源工具从Python查找和计算SAS7BDAT文件中的记录总数

仅使用开源工具从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

我有一些sas7dat文件,包含数亿行,大约100GB-1000GB。我希望能够有效地做到以下几点:

  • 计算文件中的记录数
  • 试图记录
    是否有任何方法可以通过
    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内存的机器。