|
我在这里的“大数据处理”中相对较新,希望就如何处理50 GB的csv文件寻求一些建议。当前的问题如下:
. E6 o0 t: `+ D' b" h1 \表看起来像:
0 z' @8 t4 r& I) T: x. f# c; a O1 h7 s0 DID,Address,City,States,... (50 more fields of characteristics of a house); `) K2 \1 g4 T7 a
1,1,1st street,Chicago,IL,...' X- \5 b; R3 C) b) \
# the first 1 is caused by write.csv, they created an index raw in the file) W5 _, b k" u3 A
我想找到属于加利福尼亚旧金山的所有行。它应该是一个简单的问题,但是csv太大。
8 i7 {+ }7 _. v# @我知道我有两种在R中执行此操作的方法,以及另一种使用数据库来处理它的方法:. k) V) c; y6 ]& r4 V$ m
(1)使用R的ffdf软件包:
/ s1 L6 m1 T5 i) T# K自上次保存文件以来,它一直使用write.csv,并且包含所有不同的类型。1 }( p) t0 d2 r( ^
all ", - ?1 y# {6 x7 p+ ?6 S; g
sep = ",",
/ _, e, N4 V+ x) Q% I header=TRUE,
u/ U C2 L/ B* ?+ s w VERBOSE=TRUE, " D* O& S; p! l1 Z1 j
first.rows=10000,
* g0 u5 m9 I4 s/ Q/ G4 c next.rows=50000,
0 P/ r& d# w- |$ v I. u )/ X k8 X8 S4 E5 Y$ K( M2 K \
控制台给了我这个:3 x# {0 j* A( i/ `* n+ p
Error in ff(initdata = initdata, length = length, levels = levels, ordered = ordered,
; w" |4 x3 G! }8 `: vmode 'character' not implemented B# F+ x: [6 r5 ?: P6 D1 C
在网上搜索时,我发现了几个不适合我的情况的答案,而且我真的无法像他们所说的那样将“字符”转换为“因子”类型。
) o2 g) I( w' J% z" `# _, O然后我尝试使用read.table.ffdf,这更是灾难。我找不到该指南的可靠指南。2 W9 H- _- u+ K8 t
(2)使用R的readline:
! T5 x1 g3 k$ [& m e我知道这是另一种好方法,但是找不到有效的方法。9 w* Y4 U/ D& K9 P
(3)使用SQL:
: O- J- A. a# ^6 R7 I如果有很好的指导,我不确定如何将文件传输到SQL版本,以及如何处理。但总的来说,我想坚持使用R。
2 D6 y& h0 C% ^) j. I感谢您的答复和帮助!9 {6 y; c$ ^7 ?$ X& @9 F
5 v. ?, x$ m2 j0 c9 [解决方案:
" N9 n: f; b5 z1 D" x0 q
2 M" U' ?2 Q I. B% C& ?$ r1 n8 c: p; {, @" L: G* @9 e1 G
2 U A, w' l2 ~3 g( |. {
您可以在带有sqldf包的幕后使用R和SQLite。您read.csv.sql可以在sqldf包中使用该函数,然后可以查询数据,但是要获取较小的数据框。& M& Z" s7 k% N) v/ Q1 S
来自文档的示例:2 {2 F) r9 z/ }1 [2 Q; h4 ^8 B4 t u
library(sqldf)4 P7 k: |/ s9 d$ C- J# F
iris2 我已经在非常大的CSV文件上使用了该库,效果很好。 |
|