我一直在尝试使用data.table包从HDFS读取大型csv文件到R,因为根据我的经验,它比rhdfs包快得多。
我已成功使用以下命令读取整个文件:
data <- fread("/usr/bin/hadoop fs -text /path/to/the/file.csv"), fill=TRUE)
然后,我想只读取包含值“2MS-US”的行。我试图用grep
:
data <- fread("/usr/bin/hadoop fs -text /path/to/the/file.csv | grep '2MS-US'"), fill=TRUE)
这将返回正确的行数,但会删除所有标题。他们现在变成“V1”,“V2”等。
根据这个thread,在使用grep
时丢失列名的问题已在data.package 1.9.6中得到解决,但即使我使用1.9.7,我仍然会遇到它。有什么想法吗?谢谢!
答案 0 :(得分:3)
使用sed
来修复此问题:
fread("hadoop fs -text /path/to/the/file.csv |sed -n '1p;/2MS-US/p'", fill=TRUE)
1p
部分打印第一行,即标题,这样我就可以保留标题以及与字符串匹配的行。