d*******1 发帖数: 854 | 1 用proc sort 被告知内存不足(有4G内存),怎么回事? 不是说SAS在硬盘上操作数据吗?
怎么也要那么多内存? |
B******y 发帖数: 9065 | 2 这个似乎只能用Server来做了,PC还是算了吧。
【在 d*******1 的大作中提到】 : 用proc sort 被告知内存不足(有4G内存),怎么回事? 不是说SAS在硬盘上操作数据吗? : 怎么也要那么多内存?
|
g**********t 发帖数: 475 | |
o****o 发帖数: 8077 | 4 排序需要额外产生文件。你的原始文件就有50GB,你需要确保你的剩余硬盘空间够大才
行。如果你有100G是剩余的,应该没问题。
其实你应该告诉我们你的文件有多少行,有几个需要排序的变量,文件大小本身并不重要
考虑到performance,根据你的具体问题,可以这么做
先对那个50G的文件,每一行写好行号,就是把_N_标出来,vname=rowID
然后把这个rowID连同需要排序的变量分离出来,这样文件一般会小点,除非你的50G的
文件全都是需要排序的变量组成,那就没辙了。这样大的文件会非常长,排序很慢。
把这个小文件排序后,你的rowID也排好了,然后在set排序好的文件的时候,set
original_file point=rowID就把两个文件链接起来了
我在PC上最大sort过10GB的文件,等了我45分钟。你要sort50GB的,就算你的PC能搞,
估计你也等的不耐烦了 |
D******n 发帖数: 2836 | 5 merge sort uses little memory which doesnt grow with the size of the data.
重要
【在 o****o 的大作中提到】 : 排序需要额外产生文件。你的原始文件就有50GB,你需要确保你的剩余硬盘空间够大才 : 行。如果你有100G是剩余的,应该没问题。 : 其实你应该告诉我们你的文件有多少行,有几个需要排序的变量,文件大小本身并不重要 : 考虑到performance,根据你的具体问题,可以这么做 : 先对那个50G的文件,每一行写好行号,就是把_N_标出来,vname=rowID : 然后把这个rowID连同需要排序的变量分离出来,这样文件一般会小点,除非你的50G的 : 文件全都是需要排序的变量组成,那就没辙了。这样大的文件会非常长,排序很慢。 : 把这个小文件排序后,你的rowID也排好了,然后在set排序好的文件的时候,set : original_file point=rowID就把两个文件链接起来了 : 我在PC上最大sort过10GB的文件,等了我45分钟。你要sort50GB的,就算你的PC能搞,
|
D******n 发帖数: 2836 | 6 如果memory不够大也没办法,我只是记得merge sort可以解决,速度当然就很慢了。
【在 o****o 的大作中提到】 : 排序需要额外产生文件。你的原始文件就有50GB,你需要确保你的剩余硬盘空间够大才 : 行。如果你有100G是剩余的,应该没问题。 : 其实你应该告诉我们你的文件有多少行,有几个需要排序的变量,文件大小本身并不重要 : 考虑到performance,根据你的具体问题,可以这么做 : 先对那个50G的文件,每一行写好行号,就是把_N_标出来,vname=rowID : 然后把这个rowID连同需要排序的变量分离出来,这样文件一般会小点,除非你的50G的 : 文件全都是需要排序的变量组成,那就没辙了。这样大的文件会非常长,排序很慢。 : 把这个小文件排序后,你的rowID也排好了,然后在set排序好的文件的时候,set : original_file point=rowID就把两个文件链接起来了 : 我在PC上最大sort过10GB的文件,等了我45分钟。你要sort50GB的,就算你的PC能搞,
|
N**D 发帖数: 10322 | 7 sas is never meant for this kind of serious work
【在 d*******1 的大作中提到】 : 用proc sort 被告知内存不足(有4G内存),怎么回事? 不是说SAS在硬盘上操作数据吗? : 怎么也要那么多内存?
|
N**D 发帖数: 10322 | 8 sort with hadoop, 50G is nothing
重要
【在 o****o 的大作中提到】 : 排序需要额外产生文件。你的原始文件就有50GB,你需要确保你的剩余硬盘空间够大才 : 行。如果你有100G是剩余的,应该没问题。 : 其实你应该告诉我们你的文件有多少行,有几个需要排序的变量,文件大小本身并不重要 : 考虑到performance,根据你的具体问题,可以这么做 : 先对那个50G的文件,每一行写好行号,就是把_N_标出来,vname=rowID : 然后把这个rowID连同需要排序的变量分离出来,这样文件一般会小点,除非你的50G的 : 文件全都是需要排序的变量组成,那就没辙了。这样大的文件会非常长,排序很慢。 : 把这个小文件排序后,你的rowID也排好了,然后在set排序好的文件的时候,set : original_file point=rowID就把两个文件链接起来了 : 我在PC上最大sort过10GB的文件,等了我45分钟。你要sort50GB的,就算你的PC能搞,
|
o****o 发帖数: 8077 | 9 楼主要在工作环境下再装个hadoop估计很麻烦
【在 N**D 的大作中提到】 : sort with hadoop, 50G is nothing : : 重要
|
s*********e 发帖数: 1051 | 10 none of the above provides any actionable solution.
you should try to index the table before sorting to reduce the demand for
resources.
by the way, did you add "sortsize = max" in the sort procedure? |
|
|
N**D 发帖数: 10322 | 11 the point is that SAS is outdated.
【在 o****o 的大作中提到】 : 楼主要在工作环境下再装个hadoop估计很麻烦
|
z****e 发帖数: 2024 | 12 that's called external sorting. lots of algorithm can be applied by using C
or equivalents.
I guess SAS do the same when physical memory is not large enough. only guess.
【在 D******n 的大作中提到】 : 如果memory不够大也没办法,我只是记得merge sort可以解决,速度当然就很慢了。
|
d*******1 发帖数: 854 | 13 这样sort 的文件可以在后面的步骤用by process吗? BTW, 文件有2亿行, 10列,需要对
三列排序
重要
【在 o****o 的大作中提到】 : 排序需要额外产生文件。你的原始文件就有50GB,你需要确保你的剩余硬盘空间够大才 : 行。如果你有100G是剩余的,应该没问题。 : 其实你应该告诉我们你的文件有多少行,有几个需要排序的变量,文件大小本身并不重要 : 考虑到performance,根据你的具体问题,可以这么做 : 先对那个50G的文件,每一行写好行号,就是把_N_标出来,vname=rowID : 然后把这个rowID连同需要排序的变量分离出来,这样文件一般会小点,除非你的50G的 : 文件全都是需要排序的变量组成,那就没辙了。这样大的文件会非常长,排序很慢。 : 把这个小文件排序后,你的rowID也排好了,然后在set排序好的文件的时候,set : original_file point=rowID就把两个文件链接起来了 : 我在PC上最大sort过10GB的文件,等了我45分钟。你要sort50GB的,就算你的PC能搞,
|
d*******1 发帖数: 854 | 14 一定要在SAS里sort, 因为后面的SAS统计步骤要用by process
【在 N**D 的大作中提到】 : sort with hadoop, 50G is nothing : : 重要
|
d*******1 发帖数: 854 | 15 i may try index, thanks, folks....
【在 s*********e 的大作中提到】 : none of the above provides any actionable solution. : you should try to index the table before sorting to reduce the demand for : resources. : by the way, did you add "sortsize = max" in the sort procedure?
|
o****o 发帖数: 8077 | 16 这个文件不大啊
2亿行,10列的文件,如果都是8位长度的变量,大约不到20GB。如果有50GB的大小,估
计是你的变量长度设置得很长,大量的时间和空间都用来进行I/O操作了
用compress=YES把char var压缩一下
我在我自己的破机器上实验了一下,只用了3个排序变量, 文件本身是6.1GB,排序用
了半个小时
另外SAS的排序算法应该用的是disk-based的那些排序算法,对memory不敏感,不存在
内存不够一说。
【在 d*******1 的大作中提到】 : 这样sort 的文件可以在后面的步骤用by process吗? BTW, 文件有2亿行, 10列,需要对 : 三列排序 : : 重要
|
d*******1 发帖数: 854 | 17 很强大, 我也担心character太长了. 你说的compress=YES是在data step 加进去的吗?
【在 o****o 的大作中提到】 : 这个文件不大啊 : 2亿行,10列的文件,如果都是8位长度的变量,大约不到20GB。如果有50GB的大小,估 : 计是你的变量长度设置得很长,大量的时间和空间都用来进行I/O操作了 : 用compress=YES把char var压缩一下 : 我在我自己的破机器上实验了一下,只用了3个排序变量, 文件本身是6.1GB,排序用 : 了半个小时 : 另外SAS的排序算法应该用的是disk-based的那些排序算法,对memory不敏感,不存在 : 内存不够一说。
|
s******d 发帖数: 303 | 18 did you use "out=" in your command?
e.g. proc sort data=AA out=BB;
by ***;
run; |