2017-08-28 59 views
0

我有一个制表符分隔的文件,其注释由##表示。我想文件读入到一个数据帧,并且想使用类似:多字符评论字符串Spark CSV阅读器

val targetDF = sparkSession.read.format("csv") 
    .option("header", "true") 
    .option("inferSchema", "true") 
    .option("delimiter", "\t") 
    .option("comment", "##") 
    .load(pathToFile) 

当我尝试这个,我得到一个运行时异常:java.lang.RuntimeException: comment cannot be more than one character。处理这个问题的最佳方法是?

回答

0

然后只用一个'#',以'#'开头的每一行都将被视为注释。这就是API所说的:

comment(默认空字符串):设置用于跳过以此字符开头的行的单个字符。默认情况下,它被禁用。

但请确保在文件中没有有效行以此字符开头。

val targetDF = sparkSession.read.format("csv") 
.option("header", "true") 
.option("inferSchema", "true") 
.option("delimiter", "\t") 
.option("comment", "#") 
.load(pathToFile) 

编辑:因为你的记录可以包含一个“#”你必须忽略comment选项,只是手动筛选数据帧之后或解析之前删除开始在你的文件中的两个“#”的任何行它。

+0

问题是标题以单个'#'开头,所以它会丢掉有效的行,并且也不能保证我的数据不以'#'开头。 –

+0

难道你不能只在头部加上别的东西吗? – cheseaux

+0

我符合文件格式[此处](https://samtools.github.io/hts-specs/VCFv4.2.pdf)并尝试将此工具公开给其他用户。此外,文件非常大(〜1.5 TB),所以我想尽量减少IO –