使用fread()和grep - 丢失的列名称将HDFS中的csv文件读入R.

时间:2016-08-08 21:36:42

标签: r data.table hdfs

我一直在尝试使用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,我仍然会遇到它。有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:3)

使用sed来修复此问题:

fread("hadoop fs -text /path/to/the/file.csv |sed -n '1p;/2MS-US/p'", fill=TRUE)

1p部分打印第一行,即标题,这样我就可以保留标题以及与字符串匹配的行。