d********t 发帖数: 9628 | 1 以前也没觉得有啥,今天dei处理一个几百兆的csv文件,excel要开半天。R更搞笑,
read.table度不完,换data.table.fread,每次到15%就死机了,只能关电源重启。awk
处理完两分钟不到。 |
w***g 发帖数: 5958 | 2 再加上gnu parallel把multi-core用足了,还能更快。
awk
【在 d********t 的大作中提到】 : 以前也没觉得有啥,今天dei处理一个几百兆的csv文件,excel要开半天。R更搞笑, : read.table度不完,换data.table.fread,每次到15%就死机了,只能关电源重启。awk : 处理完两分钟不到。
|
d********t 发帖数: 9628 | 3 这个咋整
【在 w***g 的大作中提到】 : 再加上gnu parallel把multi-core用足了,还能更快。 : : awk
|
w***g 发帖数: 5958 | 4 如果你没有parallel命令,或者命令比较老的话,先用下面的更新。
(wget -O - pi.dk/3 || curl pi.dk/3/) | sudo bash
比如有个大文件XXX有1G, 想数行数。直接就是
cat XXX | wc -l
用parallel就是
cat XXX | parallel --block 10M --pipe wc -l | awk 'BEGIN{a=0;}{a = a+ $1;}
END{print a;}'
wc -l可以换成grep, awk等任意可以以pipe方式运行的程序。
parallel --pipe会把输入分成大致--block指定的大小,默认是1M。然后启动N个wc一
块跑。和hadoop一样,parallel只会在行与行之间切分,所以是awk-friendly的。
parallel --pipe这步相当于map,如果有需要后面再reduce一下。
如果不加--pipe,输入的每一行会作为参数启动一个后面跟的命令。比如你的输入如果
存在大量文件里,那么就是find ... -type f | pipe wc -l 了
很多人不会写脚本,用java写个mapreduce就牛B哄哄的。其实几G几十G数据的话随便写
两行脚本就解决了。
【在 d********t 的大作中提到】 : 这个咋整
|
d********t 发帖数: 9628 | 5 谢了,不过现在公司还是Windows,这些在Cygwin下估计不能work吧:(
【在 w***g 的大作中提到】 : 如果你没有parallel命令,或者命令比较老的话,先用下面的更新。 : (wget -O - pi.dk/3 || curl pi.dk/3/) | sudo bash : 比如有个大文件XXX有1G, 想数行数。直接就是 : cat XXX | wc -l : 用parallel就是 : cat XXX | parallel --block 10M --pipe wc -l | awk 'BEGIN{a=0;}{a = a+ $1;} : END{print a;}' : wc -l可以换成grep, awk等任意可以以pipe方式运行的程序。 : parallel --pipe会把输入分成大致--block指定的大小,默认是1M。然后启动N个wc一 : 块跑。和hadoop一样,parallel只会在行与行之间切分,所以是awk-friendly的。
|
g*****g 发帖数: 34805 | 6 mapreduce那是跑集群用的。P级数据一样跑。几十个 G 写个 streaming跑并发也就10
行吧。可以写复杂点的 filtering.
【在 w***g 的大作中提到】 : 如果你没有parallel命令,或者命令比较老的话,先用下面的更新。 : (wget -O - pi.dk/3 || curl pi.dk/3/) | sudo bash : 比如有个大文件XXX有1G, 想数行数。直接就是 : cat XXX | wc -l : 用parallel就是 : cat XXX | parallel --block 10M --pipe wc -l | awk 'BEGIN{a=0;}{a = a+ $1;} : END{print a;}' : wc -l可以换成grep, awk等任意可以以pipe方式运行的程序。 : parallel --pipe会把输入分成大致--block指定的大小,默认是1M。然后启动N个wc一 : 块跑。和hadoop一样,parallel只会在行与行之间切分,所以是awk-friendly的。
|
S*******e 发帖数: 525 | 7 我也觉得他那方法毕竟还是单机的 -- parallel 也不能在IO上快太多。
10
【在 g*****g 的大作中提到】 : mapreduce那是跑集群用的。P级数据一样跑。几十个 G 写个 streaming跑并发也就10 : 行吧。可以写复杂点的 filtering.
|
w***g 发帖数: 5958 | 8 麻烦你说个我们不知道的。hadoop又不是到处都有。我倒是见过一些外行
处理几十G数据还专门装个hadoop。如果都是P级数据的话spark这种根本就火不起来。
Spark火就是证明了其实大部分情况下撑死也就若干T。
10
【在 g*****g 的大作中提到】 : mapreduce那是跑集群用的。P级数据一样跑。几十个 G 写个 streaming跑并发也就10 : 行吧。可以写复杂点的 filtering.
|
i**i 发帖数: 1500 | 9 read.table 需要把整个文件读到内存,用 data.frame存储。 如果这里面有字符串,
还要转换成factor. 很费劲的。
在R里,你需要直接用file, 每次读一部分。
你能用excel打开,应该不超过65535 行。 用R处理不在话下。
awk
【在 d********t 的大作中提到】 : 以前也没觉得有啥,今天dei处理一个几百兆的csv文件,excel要开半天。R更搞笑, : read.table度不完,换data.table.fread,每次到15%就死机了,只能关电源重启。awk : 处理完两分钟不到。
|
D*******a 发帖数: 3688 | 10 印象中excel至少能处理1048576行
【在 i**i 的大作中提到】 : read.table 需要把整个文件读到内存,用 data.frame存储。 如果这里面有字符串, : 还要转换成factor. 很费劲的。 : 在R里,你需要直接用file, 每次读一部分。 : 你能用excel打开,应该不超过65535 行。 用R处理不在话下。 : : awk
|
|
|
i**i 发帖数: 1500 | 11 2010是65535.
2013是1,048,576 rows by 16,384 columns
【在 D*******a 的大作中提到】 : 印象中excel至少能处理1048576行
|
g*****g 发帖数: 34805 | 12 这你也看干什么,如果要想实时结果数据量小也不见得错
【在 w***g 的大作中提到】 : 麻烦你说个我们不知道的。hadoop又不是到处都有。我倒是见过一些外行 : 处理几十G数据还专门装个hadoop。如果都是P级数据的话spark这种根本就火不起来。 : Spark火就是证明了其实大部分情况下撑死也就若干T。 : : 10
|
g*****g 发帖数: 34805 | 13 我说的 Java 8 streaming api 你就不知道呀,同样可以并发而且灵活度高。
【在 w***g 的大作中提到】 : 麻烦你说个我们不知道的。hadoop又不是到处都有。我倒是见过一些外行 : 处理几十G数据还专门装个hadoop。如果都是P级数据的话spark这种根本就火不起来。 : Spark火就是证明了其实大部分情况下撑死也就若干T。 : : 10
|
d********t 发帖数: 9628 | 14 扯淡吧,一共52万行。
【在 i**i 的大作中提到】 : read.table 需要把整个文件读到内存,用 data.frame存储。 如果这里面有字符串, : 还要转换成factor. 很费劲的。 : 在R里,你需要直接用file, 每次读一部分。 : 你能用excel打开,应该不超过65535 行。 用R处理不在话下。 : : awk
|
w***g 发帖数: 5958 | 15 我以为你是hadoop streaming。 java那个没见过,你写个wc -l对应的我们看看。
【在 g*****g 的大作中提到】 : 我说的 Java 8 streaming api 你就不知道呀,同样可以并发而且灵活度高。
|
i**i 发帖数: 1500 | 16 你才傻逼呢。
把你的问件给我,让爷给你示范一下。
【在 d********t 的大作中提到】 : 扯淡吧,一共52万行。
|
w**z 发帖数: 8232 | 17 Java streaming 主要针对collection.
【在 w***g 的大作中提到】 : 我以为你是hadoop streaming。 java那个没见过,你写个wc -l对应的我们看看。
|
g*****g 发帖数: 34805 | 18 我也不熟,不过差不多长这样吧。并发读,快不快就要看配置了。如果你过滤复杂
regex不好写,或者上下行相关等等,这个就不错。
Files.lines("myFile").parallelStream().filter(l->l.contains(keyword)).count(
);
对应
grep keyword myFile | wc -l
【在 w***g 的大作中提到】 : 我以为你是hadoop streaming。 java那个没见过,你写个wc -l对应的我们看看。
|
m******t 发帖数: 635 | 19 几百兆的话,任意一个脚本语言Perl, python, Ruby都一点问题没有。玩得花的话可以
考虑Python Pandas
awk
【在 d********t 的大作中提到】 : 以前也没觉得有啥,今天dei处理一个几百兆的csv文件,excel要开半天。R更搞笑, : read.table度不完,换data.table.fread,每次到15%就死机了,只能关电源重启。awk : 处理完两分钟不到。
|
d********t 发帖数: 9628 | 20 是没问题,可是两百多column我只需要截取简单数据做简单计算,真心没必要写脚本。
【在 m******t 的大作中提到】 : 几百兆的话,任意一个脚本语言Perl, python, Ruby都一点问题没有。玩得花的话可以 : 考虑Python Pandas : : awk
|
|
|
w**z 发帖数: 8232 | 21 重点是parallelstream
http://docs.oracle.com/javase/tutorial/collections/streams/para
but be careful:
http://zeroturnaround.com/rebellabs/java-parallel-streams-are-b
http://java.dzone.com/articles/think-twice-using-java-8
It's not coming for free.
count(
【在 g*****g 的大作中提到】 : 我也不熟,不过差不多长这样吧。并发读,快不快就要看配置了。如果你过滤复杂 : regex不好写,或者上下行相关等等,这个就不错。 : Files.lines("myFile").parallelStream().filter(l->l.contains(keyword)).count( : ); : 对应 : grep keyword myFile | wc -l
|
d****i 发帖数: 4809 | 22 多谢指出问题,正如大神Linus最近指出的,忘掉操蛋的并行计算吧,并行计算不是
silver bullet,大部分时候我们并不需要并行也过得很好!java 8的stream底层的实
现就是fork-join pool,就是把他变成了看起来的语法糖而已。
【在 w**z 的大作中提到】 : 重点是parallelstream : http://docs.oracle.com/javase/tutorial/collections/streams/para : but be careful: : http://zeroturnaround.com/rebellabs/java-parallel-streams-are-b : http://java.dzone.com/articles/think-twice-using-java-8 : It's not coming for free. : : count(
|
w**z 发帖数: 8232 | 23 呵呵,觉得自己会multithread programming的大多不知道自己在干什么。
我是能不用尽量不用。只有benchmark 说performance 不行了,才会考虑。
【在 d****i 的大作中提到】 : 多谢指出问题,正如大神Linus最近指出的,忘掉操蛋的并行计算吧,并行计算不是 : silver bullet,大部分时候我们并不需要并行也过得很好!java 8的stream底层的实 : 现就是fork-join pool,就是把他变成了看起来的语法糖而已。
|
d****i 发帖数: 4809 | 24 如果需要的话,我宁可喜欢用较难的多线程的方式来写并行,也不喜欢像Java 8那样借
助于语法糖的一层包皮来实现所谓的并行。前者概念更清楚,容易让人知道自己在干什
么,虽然不易。后者则完全是为了语法糖而包了一层。
【在 w**z 的大作中提到】 : 呵呵,觉得自己会multithread programming的大多不知道自己在干什么。 : 我是能不用尽量不用。只有benchmark 说performance 不行了,才会考虑。
|
d****i 发帖数: 4809 | 25 对啊,有句名言叫做
Premature optimization is the root of all evil
你这个做法恰恰是对的
【在 w**z 的大作中提到】 : 呵呵,觉得自己会multithread programming的大多不知道自己在干什么。 : 我是能不用尽量不用。只有benchmark 说performance 不行了,才会考虑。
|
g*****g 发帖数: 34805 | 26 这当然是语法糖啦,只不过原来如果是blocking IO,这个做法没啥区别。比如上次我
跑个data migration,先从DB dump了几百万个记录,然后挨个做remote API call. 慢
在remote call上,只要单独起个pool,跟弄一堆Future没啥区别呀。反正单线程是肯
定不行的,估计得跑好几周。
【在 w**z 的大作中提到】 : 重点是parallelstream : http://docs.oracle.com/javase/tutorial/collections/streams/para : but be careful: : http://zeroturnaround.com/rebellabs/java-parallel-streams-are-b : http://java.dzone.com/articles/think-twice-using-java-8 : It's not coming for free. : : count(
|
r*g 发帖数: 3159 | 27 和perl比如何?
awk
【在 d********t 的大作中提到】 : 以前也没觉得有啥,今天dei处理一个几百兆的csv文件,excel要开半天。R更搞笑, : read.table度不完,换data.table.fread,每次到15%就死机了,只能关电源重启。awk : 处理完两分钟不到。
|
g*****g 发帖数: 34805 | |
d********t 发帖数: 9628 | 29 应该比Perl快。我以前常用Perl的,不过Perl也有大块数据吃不进的问题。
【在 r*g 的大作中提到】 : 和perl比如何? : : awk
|
q*****w 发帖数: 62 | 30 请问如果一个打文件要sorting, 用parallel怎么写? |
|
|
w***g 发帖数: 5958 | 31 不用parallel。Linux下新版本的sort自己就是多核的。
【在 q*****w 的大作中提到】 : 请问如果一个打文件要sorting, 用parallel怎么写?
|
M*P 发帖数: 6456 | 32 这先用excel再用readtable一看就是外行啊。
awk
★ 发自iPhone App: ChineseWeb 7.8
【在 d********t 的大作中提到】 : 以前也没觉得有啥,今天dei处理一个几百兆的csv文件,excel要开半天。R更搞笑, : read.table度不完,换data.table.fread,每次到15%就死机了,只能关电源重启。awk : 处理完两分钟不到。
|
e********2 发帖数: 495 | 33 awk可以用于streaming。
【在 M*P 的大作中提到】 : 这先用excel再用readtable一看就是外行啊。 : : awk : ★ 发自iPhone App: ChineseWeb 7.8
|
d********t 发帖数: 9628 | 34 我根本不会excel,人家发的excel给我没办法看一眼。
【在 M*P 的大作中提到】 : 这先用excel再用readtable一看就是外行啊。 : : awk : ★ 发自iPhone App: ChineseWeb 7.8
|
j********x 发帖数: 2330 | 35 怎么总是有人提这种cat xxx | grep/awk/sed ...
直接grep awk sed ...
莫名其妙。。。
【在 w***g 的大作中提到】 : 如果你没有parallel命令,或者命令比较老的话,先用下面的更新。 : (wget -O - pi.dk/3 || curl pi.dk/3/) | sudo bash : 比如有个大文件XXX有1G, 想数行数。直接就是 : cat XXX | wc -l : 用parallel就是 : cat XXX | parallel --block 10M --pipe wc -l | awk 'BEGIN{a=0;}{a = a+ $1;} : END{print a;}' : wc -l可以换成grep, awk等任意可以以pipe方式运行的程序。 : parallel --pipe会把输入分成大致--block指定的大小,默认是1M。然后启动N个wc一 : 块跑。和hadoop一样,parallel只会在行与行之间切分,所以是awk-friendly的。
|