我拥有的文件格式有点像csv,看起来像这样(某种形式的abinitio .dat文件):
1,apple,10.00,\n
2,banana,12.35,\n
3,orange,9.23,\n
逗号实际上是“头开始” 0x01字节字符,但是为了简单起见,我将使用逗号。我可以轻松读取上面的示例,方法是使用自定义行拆分,\n
将文件读取为字符串RDD,然后将其传递到spark.read.csv
中。我目前正在用,\n
分隔行,因为数据中可能会有换行符,并且我认为对于每个记录来说,这两个字符是唯一的。但是,当文本字段的开头有换行符时,就会出现问题。例如:
1,one \n apple,two banana,\n three orange,\n
我当前的代码可以忽略记录1
中的换行符,但是在,\n
之后选择3
并将3行分成4行。格式?
我目前的想法是:
- 在允许分割之前,检查
,
列定界符的数量是否正确。我不确定如何实现此功能,当spark看到,\n
并检查分隔符的正确数量时,是否可以进行正则表达式回溯? - 尝试将文件强制转换为CSV以外的其他格式
- 创建自己的
InputFormatClass
,尽管我不确定这意味着什么。