我有一个制表符分隔文件(tsv),其架构不为我所知,我想使用“Scalding”从每一行中删除第一列。
我知道如果架构已知,那么我可以使用
val dataControlSchema = List('a,'b,'c,'d,'e,'f)
Tsv("abc.tsv").read
.discard('a)
.write(Tsv("output1.tsv"))
但问题是我不知道架构,可能会有6列或7或甚至更多。但我确定要删除第一个COLOUMN ..任何帮助将不胜感激
答案 0 :(得分:0)
Scalding提供两种API
在这种情况下,您必须使用类型安全的API
val fromFile: TypedPipe[ String ] = TypedPipe.from( TextLine("abc.tsv" ) )
fromFile
.map( _.split( "\t" ) ) // now should be TypedPipe[ Array[ String ] ]
.map( _.toList ) // now should be TypedPipe[ List[ String ] ]
.map( _.drop( 1 ) ) // this should drop first string from the List
.map( _.mkString( "\t" ) ) // Now TypedList[ String ]
.write( TypedTsv( "output.tsv" ) )
答案 1 :(得分:0)
太棒了,@ sarveshKsingh。只是在.write末尾缺少一个括号
val fromFile:TypedPipe [String] = TypedPipe.from(TextLine(" abc.tsv#34;))
fromFile
.map( _.split( "\t" ) ) // now should be TypedPipe[ Array[ String ] ]
.map( _.toList ) // now should be TypedPipe[ List[ String ] ]
.map( _.drop( 1 ) ) // this should drop first string from the List
.map( _.mkString( "\t" ) ) // Now TypedList[ String ]
.write( TypedTsv( "output.tsv" )) // a bracket was missing.