|
我在这里的“大数据处理”中相对较新,希望就如何处理50 GB的csv文件寻求一些建议。当前的问题如下:
. N. @8 \: v4 f+ t+ H. [4 C表看起来像:
; }( t' V2 P8 }ID,Address,City,States,... (50 more fields of characteristics of a house)6 w! u v5 a( w0 P2 E
1,1,1st street,Chicago,IL,...- ]) W y4 m- u3 j7 N
# the first 1 is caused by write.csv, they created an index raw in the file0 ?- ^6 d& B: T! f
我想找到属于加利福尼亚旧金山的所有行。它应该是一个简单的问题,但是csv太大。+ E1 M2 `; `0 ^. x* ?+ v1 k# A$ t
我知道我有两种在R中执行此操作的方法,以及另一种使用数据库来处理它的方法:% L% M) P0 {* Z/ g
(1)使用R的ffdf软件包:
* k7 V" N! K; a4 H% e7 O" ?自上次保存文件以来,它一直使用write.csv,并且包含所有不同的类型。4 V. z. f6 B7 K% d
all ", ; f0 G: o7 n4 D8 W
sep = ",",- V: I3 m) v$ j3 S) j
header=TRUE,
7 N+ T- l, | R3 t/ z& K& q VERBOSE=TRUE, $ H" r0 ]# B: Z% n: y
first.rows=10000,
5 @8 q: [1 B/ Z# `( c6 y0 b next.rows=50000,' v w; F* g) F2 ~1 q. C
)
( u. n6 K" t: o* P2 z$ \控制台给了我这个:
) a& p. s" d8 }' j4 t KError in ff(initdata = initdata, length = length, levels = levels, ordered = ordered, # ~0 p- e" ^; f2 O( ~7 o) v
: vmode 'character' not implemented `8 l* I8 t0 \# `6 a- U4 t0 M/ ~
在网上搜索时,我发现了几个不适合我的情况的答案,而且我真的无法像他们所说的那样将“字符”转换为“因子”类型。
( N: \) G) B* V然后我尝试使用read.table.ffdf,这更是灾难。我找不到该指南的可靠指南。
7 Q3 @4 X2 }2 q+ ^! Y. K6 m(2)使用R的readline:8 X1 w0 Z. @$ y4 h7 q1 p
我知道这是另一种好方法,但是找不到有效的方法。
% F' P" f; J6 Q/ @(3)使用SQL:2 C3 B, u% c" m+ T$ O n- o+ c. @
如果有很好的指导,我不确定如何将文件传输到SQL版本,以及如何处理。但总的来说,我想坚持使用R。
3 j8 @: u* D" Z& }0 A6 Q感谢您的答复和帮助!% n8 L+ O D K8 `
, l, M4 P6 e) H
解决方案:
4 b7 t$ h0 m( Q2 { f6 a3 f : F& \5 t2 n, _; d$ g9 w6 F
* |0 H' i+ m: |* u+ c7 G
; b6 P+ }( A2 W
您可以在带有sqldf包的幕后使用R和SQLite。您read.csv.sql可以在sqldf包中使用该函数,然后可以查询数据,但是要获取较小的数据框。. ~7 B" {& ]4 P6 D$ D% R
来自文档的示例:% }- y' N2 a! L4 X& K
library(sqldf)
9 V; U2 M; o+ R8 p& r) riris2 我已经在非常大的CSV文件上使用了该库,效果很好。 |
|