我有以下格式的数据:
"header1","header2","header3",... "value11","value12","value13",... "value21","value22","value23",... ....
在烫伤中解析它的最佳方法是什么?我总共有50多个专栏,但我只对其中一些感兴趣。我试着用csv(“文件”)导入它,但是没有用。想到的唯一解决方案是使用textline手动解析它,忽略offset==0的行。但我相信一定有更好的解决办法。
jv2fixgn1#
最后,我通过手动解析每一行来解决这个问题,如下所示:
def tipPipe = TextLine("tip").read.mapTo('line ->('field1, 'field5)) { line: String => val arr = line.split("\",\"") (arr(0).replace("\"", ""), if (arr.size >= 88) arr(4) else "unknown") }
4xy9mtcn2#
看起来您的数据集中有88个字段(远远超过22个字段),而不仅仅是1个。阅读:https://github.com/twitter/scalding/wiki/frequently-asked-questions#what-如果我的数据集中有超过22个字段请参见以上链接中的文本:如果我的数据集中有超过22个字段呢?许多示例(例如在tutorial/directory中)显示,在读取分隔文件时,fields参数被指定为scala元组。不过,scala元组目前最多只能包含22个元素。要读入包含22个以上字段的数据集,可以使用符号列表作为字段说明符。例如
val mySchema = List('first, 'last, 'phone, 'age, 'country) val input = Csv("/path/to/file.txt", separator = ",", fields = mySchema) val output = TextLine("/path/to/out.txt") input.read .project('age, 'country) .write(Tsv(output))
另一种指定字段的方法是使用scala枚举,这在develop分支中可用(截至2013年4月2日),如教程6所示:
object Schema extends Enumeration { val first, last, phone, age,country = Value // arbitrary number of fields } import Schema._ Csv("tutorial/data/phones.txt", separator = " ", fields = Schema) .read.project(first,age).write(Tsv("tutorial/data/output6.tsv"))
因此,在读取文件时,使用list或enumeration提供一个包含所有88个字段的模式(参见上面的链接/引用)要跳过头,还可以在csv构造函数中提供skipheader=true。
Csv("tutorial/data/phones.txt", fields = Schema, skipHeader = true)
2条答案
按热度按时间jv2fixgn1#
最后,我通过手动解析每一行来解决这个问题,如下所示:
4xy9mtcn2#
看起来您的数据集中有88个字段(远远超过22个字段),而不仅仅是1个。阅读:
https://github.com/twitter/scalding/wiki/frequently-asked-questions#what-如果我的数据集中有超过22个字段
请参见以上链接中的文本:
如果我的数据集中有超过22个字段呢?
许多示例(例如在tutorial/directory中)显示,在读取分隔文件时,fields参数被指定为scala元组。不过,scala元组目前最多只能包含22个元素。要读入包含22个以上字段的数据集,可以使用符号列表作为字段说明符。例如
另一种指定字段的方法是使用scala枚举,这在develop分支中可用(截至2013年4月2日),如教程6所示:
因此,在读取文件时,使用list或enumeration提供一个包含所有88个字段的模式(参见上面的链接/引用)
要跳过头,还可以在csv构造函数中提供skipheader=true。